サンプル10 testPattern.cpp

 log4cpp::PatternLayoutのサンプル、すなわち、

%c:カテゴリ
%d:日付

など、実際に置換した後の文字列を確認することができます。

関連ファイル
  • testPattern.cpp
ファイルの中身

testPattern.cpp

  1. // testLog4CPP.cpp : Derived from testCategory.cpp
  2. //
  3. #include <log4cpp/Category.hh>
  4. #include <log4cpp/Appender.hh>
  5. #include <log4cpp/Priority.hh>
  6. #include <log4cpp/NDC.hh>
  7. #include <log4cpp/PatternLayout.hh>
  8. #include <log4cpp/BasicConfigurator.hh>
  9. #include <iostream>
  10. void test(std::string pattern, log4cpp::PatternLayout* layout, log4cpp::Category& cat)
  11. {
  12. try {
  13. layout->setConversionPattern(pattern);
  14. cat.error("message");
  15. } catch(log4cpp::ConfigureFailure& f) {
  16. std::cerr << "configure failure: " << f.what() << std::endl;
  17. }
  18. }
  19. int main(int argc, char* argv[])
  20. {
  21. log4cpp::BasicConfigurator::configure();
  22. log4cpp::PatternLayout* layout = new log4cpp::PatternLayout();
  23. log4cpp::Category::getRoot().getAppender()->setLayout(layout);
  24. log4cpp::Category& cat = log4cpp::Category::getInstance("cat1");
  25. log4cpp::NDC::push("ndc1");
  26. test("%% %r %c:%d (%R / %r) [%p] %x %m %% (%u) %n", layout, cat);
  27. // test format specifiers
  28. test(">%10m<%n", layout, cat);
  29. test(">%-10m<%n", layout, cat);
  30. test(">%3.5m<%n", layout, cat);
  31. test(">%.5m<%n", layout, cat);
  32. // category test
  33. test(">%c{2}<%n", layout, log4cpp::Category::getInstance("c1.c2.c3.c4"));
  34. // test date format
  35. test("%d{%d %b %Y %H:%M:%S.%l} %m %n", layout, cat);
  36. test("%d{%d %b %Y %H:%M:%S.%l", layout, cat);
  37. test("%d%n", layout, cat);
  38. test("%m %d%n", layout, cat);
  39. int i;
  40. for (i = 0; i < 10; i++) {
  41. cat.error("%d message", i);
  42. }
  43. test("%m %d{%H:%M:%S.%l %d %b %Y}%n", layout, cat);
  44. for (i = 0; i < 10; i++) {
  45. cat.error("%d message", i);
  46. }
  47. // test bug #688715
  48. test("%.10m", layout, cat);
  49. log4cpp::Category::shutdown();
  50. return 0;
  51. }

実行結果例

 testPattern.cppをビルドし、実行した結果です。実行環境はLinux(Ubuntu 11.0)です。

stdout(標準出力):

% 0 cat1:2012-05-13 09:15:43,894 (1336868143 / 0) [ERROR] ndc1 message % (10000) 
>   message<
>message   <
>messa<
>messa<
>c3.c4<
13 May 2012 09:15:43.902 message 
13 May 2012 09:15:43.9032012-05-13 09:15:43,903
message 2012-05-13 09:15:43,904
0 message 2012-05-13 09:15:43,904
1 message 2012-05-13 09:15:43,904
2 message 2012-05-13 09:15:43,910
3 message 2012-05-13 09:15:43,910
4 message 2012-05-13 09:15:43,911
5 message 2012-05-13 09:15:43,911
6 message 2012-05-13 09:15:43,911
7 message 2012-05-13 09:15:43,912
8 message 2012-05-13 09:15:43,912
9 message 2012-05-13 09:15:43,913
message 09:15:43.913 13 May 2012
0 message 09:15:43.913 13 May 2012
1 message 09:15:43.914 13 May 2012
2 message 09:15:43.914 13 May 2012
3 message 09:15:43.914 13 May 2012
4 message 09:15:43.915 13 May 2012
5 message 09:15:43.915 13 May 2012
6 message 09:15:43.915 13 May 2012
7 message 09:15:43.916 13 May 2012
8 message 09:15:43.916 13 May 2012
9 message 09:15:43.921 13 May 2012
message