サンプル13 testPropertyConfig.cpp

 log4cppの設定ファイルを使用し、ログ出力を行うサンプルです。

関連ファイル
  • testPropertyConfig.cpp
  • testConfig.log4cpp.properties
ファイルの中身

testPropertyConfig.cpp

  1. // testConfig.cpp : Derived from testPattern.cpp.
  2. //
  3. #include <log4cpp/Portability.hh>
  4. #ifdef WIN32
  5. #include <windows.h>
  6. #endif
  7. #ifdef LOG4CPP_HAVE_UNISTD_H
  8. #include <unistd.h>
  9. #endif
  10. #include <cstdlib>
  11. #include <log4cpp/Category.hh>
  12. #include <log4cpp/Appender.hh>
  13. #include <log4cpp/OstreamAppender.hh>
  14. #include <log4cpp/FileAppender.hh>
  15. #include <log4cpp/Layout.hh>
  16. #include <log4cpp/BasicLayout.hh>
  17. #include <log4cpp/Priority.hh>
  18. #include <log4cpp/NDC.hh>
  19. #include <log4cpp/PatternLayout.hh>
  20. #include <log4cpp/PropertyConfigurator.hh>
  21. double calcPi()
  22. {
  23. double denominator = 3.0;
  24. double retVal = 4.0;
  25. long i;
  26. for (i = 0; i < 50000000l; i++)
  27. {
  28. retVal = retVal - (4.0 / denominator);
  29. denominator += 2.0;
  30. retVal = retVal + (4.0 /denominator);
  31. denominator += 2.0;
  32. }
  33. return retVal;
  34. }
  35. int main(int argc, char* argv[])
  36. {
  37. try {
  38. /* looking for the init file in $srcdir is a requirement of
  39. automake's distcheck target.
  40. */
  41. char* srcdir = std::getenv("srcdir");
  42. std::string initFileName;
  43. if (srcdir == NULL) {
  44. initFileName = "./testConfig.log4cpp.properties";
  45. }
  46. else {
  47. initFileName = std::string(srcdir) + "/testConfig.log4cpp.properties";
  48. }
  49. log4cpp::PropertyConfigurator::configure(initFileName);
  50. } catch(log4cpp::ConfigureFailure& f) {
  51. std::cout << "Configure Problem " << f.what() << std::endl;
  52. return -1;
  53. }
  54. log4cpp::Category& root = log4cpp::Category::getRoot();
  55. log4cpp::Category& sub1 =
  56. log4cpp::Category::getInstance(std::string("sub1"));
  57. log4cpp::Category& sub2 =
  58. log4cpp::Category::getInstance(std::string("sub1.sub2"));
  59. root.error("root error");
  60. root.warn("root warn");
  61. sub1.error("sub1 error");
  62. sub1.warn("sub1 warn");
  63. calcPi();
  64. sub2.error("sub2 error");
  65. sub2.warn("sub2 warn");
  66. root.error("root error");
  67. root.warn("root warn");
  68. sub1.error("sub1 error");
  69. sub1.warn("sub1 warn");
  70. #ifdef WIN32
  71. Sleep(3000);
  72. #else
  73. sleep(3);
  74. #endif
  75. sub2.error("sub2 error");
  76. sub2.warn("sub2 warn");
  77. sub2.error("%s %s %d", "test", "vform", 123);
  78. sub2.warnStream() << "streamed warn";
  79. sub2 << log4cpp::Priority::WARN << "warn2.." << "..warn3..value=" << 0
  80. << log4cpp::eol << "..warn4";
  81. log4cpp::Category::shutdown();
  82. return 0;
  83. }

testConfig.log4cpp.properties

# a simple test config

log4j.rootCategory=DEBUG, rootAppender
log4j.category.sub1=,A1
log4j.category.sub2=INFO
log4j.category.sub1.sub2=ERROR, A2

log4j.additivity.sub1.sub2=false

log4j.appender.rootAppender=org.apache.log4j.ConsoleAppender
log4j.appender.rootAppender.layout=org.apache.log4j.BasicLayout

log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.fileName=A1.log
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=The message '%m' at time %d%n

実行結果例

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

stdout(標準出力):

1336871833 ERROR  : root error
1336871833 WARN  : root warn
1336871833 ERROR sub1 : sub1 error
1336871833 WARN sub1 : sub1 warn
The message 'sub2 error' at time 2012-05-13 10:17:14,894
1336871834 ERROR  : root error
1336871834 WARN  : root warn
1336871834 ERROR sub1 : sub1 error
1336871834 WARN sub1 : sub1 warn
The message 'sub2 error' at time 2012-05-13 10:17:17,897
The message 'test vform 123' at time 2012-05-13 10:17:17,897