日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

log4cxx第三篇----使用多个logger

發(fā)布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 log4cxx第三篇----使用多个logger 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用多個logger時,所有l(wèi)ogger的配置寫在一個配置文件里面

兩個例子:

1 一個繼承的例子(http://logging.apache.org/log4cxx/)

?

//  file com/foo/bar.h
#include "log4cxx/logger.h"namespace com {namespace foo {class Bar {static log4cxx::LoggerPtr logger;public:void doIt();}}
}
// file bar.cpp
#include "com/foo/bar.h"using namespace com::foo;
using namespace log4cxx;LoggerPtr Bar::logger(Logger::getLogger("com.foo.bar"));void Bar::doIt() {LOG4CXX_DEBUG(logger, "Did it again!")
}

?

?

log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN

?

?

?

// file MyApp2.cpp#include "com/foo/bar.h"
using namespace com::foo;// include log4cxx header files.
#include "log4cxx/logger.h"
#include "log4cxx/basicconfigurator.h"
#include "log4cxx/propertyconfigurator.h"
#include "log4cxx/helpers/exception.h"using namespace log4cxx;
using namespace log4cxx::helpers;
// Define a static logger variable so that it references the
// Logger instance named "MyApp".
LoggerPtr logger(Logger::getLogger("MyApp"));int main(int argc, char **argv)
{int result = EXIT_SUCCESS;try{if (argc > 1){// BasicConfigurator replaced with PropertyConfigurator.PropertyConfigurator::configure(argv[1]);}else{BasicConfigurator::configure();}LOG4CXX_INFO(logger, "Entering application.")Bar barbar.doIt();LOG4CXX_INFO(logger, "Exiting application.")}catch(Exception&){result = EXIT_FAILURE;}return result;
}

?

?

The output of?MyApp?configured with this file is shown below.

2000-09-07 14:07:41,508 [12345] INFO  MyApp - Entering application.
2000-09-07 14:07:41,529 [12345] INFO  MyApp - Exiting application.

2 使用多個logger

?

前置知識

?

?

  • log4cxx可以使用配置文件進行設置,并且其設置方式與log4j兼容
  • log4cxx庫對日志流設置,只需更改配置文件中的appender屬性;
  • log4cxx支持Logger繼承機制,默認會繼承父Loggerappender,由于要將日志流輸出到多個文件中,因此需要將子Logger的繼承屬性設置為false.

?

配置子Logger

為了最大程度的靈活性,log4cxx引入了子Logger這個概念,即擁有與父Logger不同的行為,和編程語言中的OOP概念一致。

下面是在配置文件中定義一個子Logger的代碼,其中ap0logger0使用的appender

?

[plain]?view plaincopyprint?
  1. log4j.logger.logger0?=?TRACE,?ap0??

?

?

設置子Logger不繼承父Loggerappender

?

[plain]?view plaincopyprint?
  1. log4j.additivity.logger0=false??
設置子Logger所使用的日志文件,下述代碼將logger0的日志文件設定為當前程序目錄下的0.log

?

?

[plain]?view plaincopyprint?
  1. log4j.appender.ap0.File=./0.log??

?

?

在程序中獲取子Logger實例

首先是加載配置文件:

?

?

[plain]?view plaincopyprint?
  1. log4cxx::PropertyConfigurator::configure(配置文件名稱);??
獲取子Logger實例:

?

?

[plain]?view plaincopyprint?
  1. log4cxx::LoggerPtr?logger?=?log4cxx::Logger::getLogger(子Logger名[例如上文中的"logger0"]);??

?

FreeJudger項目中使用的完整配置文件

?

?

下述代碼配置了8個子Logger,用于FreeJudger項目中判題線程的日志:

?

?

?

[plain]?view plaincopyprint?
  1. log4j.additivity.gather?=?false??
  2. log4j.rootLogger=TRACE??
  3. ??
  4. log4j.logger.logger0?=?TRACE,?ap0??
  5. log4j.logger.logger1?=?TRACE,?ap1??
  6. log4j.logger.logger2?=?TRACE,?ap2??
  7. log4j.logger.logger3?=?TRACE,?ap3??
  8. log4j.logger.logger4?=?TRACE,?ap4??
  9. log4j.logger.logger5?=?TRACE,?ap5??
  10. log4j.logger.logger6?=?TRACE,?ap6??
  11. log4j.logger.logger7?=?TRACE,?ap7??
  12. log4j.logger.logger8?=?TRACE,?ap8??
  13. ??
  14. log4j.additivity.logger0=false??
  15. log4j.additivity.logger1=false??
  16. log4j.additivity.logger2=false??
  17. log4j.additivity.logger3=false??
  18. log4j.additivity.logger4=false??
  19. log4j.additivity.logger5=false??
  20. log4j.additivity.logger6=false??
  21. log4j.additivity.logger7=false??
  22. log4j.additivity.logger8=false??
  23. ??
  24. log4j.appender.logfile.encoding=UTF-8??
  25. ??
  26. log4j.appender.stdout=org.apache.log4j.ConsoleAppender??
  27. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout??
  28. log4j.appender.stdout.layout.ConversionPattern=%5p?[%t]?(%F:%L)?-?%m%n??
  29. ??
  30. log4j.appender.R.MaxFileSize=100KB??
  31. ??
  32. log4j.appender.ap0=org.apache.log4j.RollingFileAppender??
  33. log4j.appender.ap0.ImmediateFlush=true???
  34. log4j.appender.ap0.File=./0.log??
  35. log4j.appender.ap0.MaxBackupIndex=10??
  36. log4j.appender.ap0.layout=org.apache.log4j.PatternLayout??
  37. log4j.appender.ap0.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  38. ??
  39. log4j.appender.ap1=org.apache.log4j.RollingFileAppender??
  40. log4j.appender.ap1.ImmediateFlush=true???
  41. log4j.appender.ap1.File=./1.log??
  42. log4j.appender.ap1.MaxBackupIndex=10??
  43. log4j.appender.ap1.layout=org.apache.log4j.PatternLayout??
  44. log4j.appender.ap1.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  45. ??
  46. log4j.appender.ap2=org.apache.log4j.RollingFileAppender??
  47. log4j.appender.ap2.ImmediateFlush=true???
  48. log4j.appender.ap2.File=./2.log??
  49. log4j.appender.ap2.MaxBackupIndex=10??
  50. log4j.appender.ap2.layout=org.apache.log4j.PatternLayout??
  51. log4j.appender.ap2.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  52. ??
  53. log4j.appender.ap3=org.apache.log4j.RollingFileAppender??
  54. log4j.appender.ap3.ImmediateFlush=true???
  55. log4j.appender.ap3.File=./3.log??
  56. log4j.appender.ap3.MaxBackupIndex=10??
  57. log4j.appender.ap3.layout=org.apache.log4j.PatternLayout??
  58. log4j.appender.ap3.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  59. ??
  60. log4j.appender.ap4=org.apache.log4j.RollingFileAppender??
  61. log4j.appender.ap4.ImmediateFlush=true???
  62. log4j.appender.ap4.File=./4.log??
  63. log4j.appender.ap4.MaxBackupIndex=10??
  64. log4j.appender.ap4.layout=org.apache.log4j.PatternLayout??
  65. log4j.appender.ap4.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  66. ??
  67. log4j.appender.ap5=org.apache.log4j.RollingFileAppender??
  68. log4j.appender.ap5.ImmediateFlush=true???
  69. log4j.appender.ap5.File=./5.log??
  70. log4j.appender.ap5.MaxBackupIndex=10??
  71. log4j.appender.ap5.layout=org.apache.log4j.PatternLayout??
  72. log4j.appender.ap5.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  73. ??
  74. log4j.appender.ap6=org.apache.log4j.RollingFileAppender??
  75. log4j.appender.ap6.ImmediateFlush=true???
  76. log4j.appender.ap6.File=./6.log??
  77. log4j.appender.ap6.MaxBackupIndex=10??
  78. log4j.appender.ap6.layout=org.apache.log4j.PatternLayout??
  79. log4j.appender.ap6.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  80. ??
  81. log4j.appender.ap7=org.apache.log4j.RollingFileAppender??
  82. log4j.appender.ap7.ImmediateFlush=true???
  83. log4j.appender.ap7.File=./7.log??
  84. log4j.appender.ap7.MaxBackupIndex=10??
  85. log4j.appender.ap7.layout=org.apache.log4j.PatternLayout??
  86. log4j.appender.ap7.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
  87. ??
  88. log4j.appender.ap8=org.apache.log4j.RollingFileAppender??
  89. log4j.appender.ap8.ImmediateFlush=true???
  90. log4j.appender.ap8.File=./8.log??
  91. log4j.appender.ap8.MaxBackupIndex=10??
  92. log4j.appender.ap8.layout=org.apache.log4j.PatternLayout??
  93. log4j.appender.ap8.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??

?

轉載于:https://www.cnblogs.com/For-her/p/3922536.html

總結

以上是生活随笔為你收集整理的log4cxx第三篇----使用多个logger的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。