サンプル3 testConfig.cpp

 log4cppの設定ファイル(シンプルフォーマット形式)の例です。 log4cpp::SimpleConfiguratorの使い方となります。

※注意:この形式の設定ファイルは非推奨です。

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

testConfig.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/SimpleConfigurator.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 = "./log4cpp.init";
  45. }
  46. else {
  47. initFileName = std::string(srcdir) + "/log4cpp.init";
  48. }
  49. log4cpp::SimpleConfigurator::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. }

log4cpp.init

# a simple test config
#
appender root basic console
priority root DEBUG
appender sub1 basic file sub1.log
#appender sub1 basic syslog log4cpptest
priority sub1.sub2 ERROR
appender sub1.sub2 pattern console The message %m at time %d%n

実行結果例

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

stdout(標準出力):

1336819971 ERROR  : root error
1336819971 WARN  : root warn
1336819971 ERROR sub1 : sub1 error
1336819971 WARN sub1 : sub1 warn
The message sub2 error at time 2012-05-12 19:52:52,265
1336819972 ERROR sub1.sub2 : sub2 error
1336819972 ERROR  : root error
1336819972 WARN  : root warn
1336819972 ERROR sub1 : sub1 error
1336819972 WARN sub1 : sub1 warn
The message sub2 error at time 2012-05-12 19:52:55,269
1336819975 ERROR sub1.sub2 : sub2 error
The message test vform 123 at time 2012-05-12 19:52:55,270
1336819975 ERROR sub1.sub2 : test vform 123