サンプル6 testFixedContextCategory.cpp

 log4cpp::FixedContextCategoryを使ったサンプルです。 このクラスはlog4cpp::Categoryのサブクラスな訳ですが、何が違うかと言うと、NDC(ネスト化診断コンテキスト)の部分が固定文字列に置き換えられるということです。

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

testFixedContextCategory.cpp

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include "log4cpp/FixedContextCategory.hh"
  4. #include "log4cpp/Appender.hh"
  5. #include "log4cpp/OstreamAppender.hh"
  6. #include "log4cpp/Layout.hh"
  7. #include "log4cpp/BasicLayout.hh"
  8. #include "log4cpp/Priority.hh"
  9. #include "log4cpp/NDC.hh"
  10. int main(int argc, char** argv) {
  11. log4cpp::Appender* appender =
  12. new log4cpp::OstreamAppender("default", &std::cout);
  13. log4cpp::Layout* layout = new log4cpp::BasicLayout();
  14. appender->setLayout(layout);
  15. log4cpp::Category& root = log4cpp::Category::getRoot();
  16. root.addAppender(appender);
  17. root.setPriority(log4cpp::Priority::ERROR);
  18. log4cpp::FixedContextCategory sub1(std::string("sub1"), std::string("context1"));
  19. log4cpp::FixedContextCategory sub1_2(std::string("sub1"), std::string("context1_2"));
  20. log4cpp::FixedContextCategory sub2(std::string("sub1.sub2"), std::string("context2"));
  21. std::cout << " root priority = " << root.getPriority() << std::endl;
  22. std::cout << " sub1 priority = " << sub1.getPriority() << std::endl;
  23. std::cout << " sub2 priority = " << sub2.getPriority() << std::endl;
  24. root.error("root error");
  25. root.warn("root warn");
  26. sub1.error("sub1 error");
  27. sub1.warn("sub1 warn");
  28. sub1_2.error("sub1 error");
  29. sub1_2.warn("sub1 warn");
  30. sub2.error("sub2 error");
  31. sub2.warn("sub2 warn");
  32. log4cpp::Category::getInstance(std::string("sub1")).
  33. setPriority(log4cpp::Priority::INFO);
  34. std::cout << " root priority = " << root.getPriority() << std::endl;
  35. std::cout << " sub1 priority = " << sub1.getPriority() << std::endl;
  36. std::cout << " sub2 priority = " << sub2.getPriority() << std::endl;
  37. std::cout << "priority info" << std::endl;
  38. root.error("root error");
  39. root.warn("root warn");
  40. sub1.error("sub1 error");
  41. sub1.warn("sub1 warn");
  42. sub2.error("sub2 error");
  43. sub2.warn("sub2 warn");
  44. sub2.error("%s %s %d", "test", "vform", 123);
  45. sub2.warnStream() << "streamed warn";
  46. sub2 << log4cpp::Priority::WARN << "warn2.." << "..warn3..value=" << 0
  47. << log4cpp::eol << "..warn4";
  48. log4cpp::Category::shutdown();
  49. return 0;
  50. }

実行結果例

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

stdout(標準出力):

 root priority = 300
 sub1 priority = 800
 sub2 priority = 800
1336866872 ERROR  : root error
1336866872 ERROR sub1 context1: sub1 error
1336866872 ERROR sub1 context1_2: sub1 error
1336866872 ERROR sub1.sub2 context2: sub2 error
 root priority = 300
 sub1 priority = 800
 sub2 priority = 800
priority info
1336866872 ERROR  : root error
1336866872 ERROR sub1 context1: sub1 error
1336866872 WARN sub1 context1: sub1 warn
1336866872 ERROR sub1.sub2 context2: sub2 error
1336866872 WARN sub1.sub2 context2: sub2 warn
1336866872 ERROR sub1.sub2 context2: test vform 123
1336866872 WARN sub1.sub2 context2: streamed warn
1336866872 WARN sub1.sub2 context2: warn2....warn3..value=0
1336866872 WARN sub1.sub2 context2: ..warn4