log4cxx第三篇----使用多个logger
生活随笔
收集整理的這篇文章主要介紹了
log4cxx第三篇----使用多个logger
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用多個logger時,所有logger的配置寫在一個配置文件里面
兩個例子:
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繼承機制,默認會繼承父Logger的appender,由于要將日志流輸出到多個文件中,因此需要將子Logger的繼承屬性設置為false.
?
配置子Logger
為了最大程度的靈活性,log4cxx引入了子Logger這個概念,即擁有與父Logger不同的行為,和編程語言中的OOP概念一致。
下面是在配置文件中定義一個子Logger的代碼,其中ap0是logger0使用的appender:
?
[plain]?view plaincopyprint?
- log4j.logger.logger0?=?TRACE,?ap0??
?
?
設置子Logger不繼承父Logger的appender:
?
[plain]?view plaincopyprint?設置子Logger所使用的日志文件,下述代碼將logger0的日志文件設定為當前程序目錄下的0.log:
- log4j.additivity.logger0=false??
?
?
[plain]?view plaincopyprint?
- log4j.appender.ap0.File=./0.log??
?
?
在程序中獲取子Logger實例
首先是加載配置文件:
?
?
[plain]?view plaincopyprint?獲取子Logger實例:
- log4cxx::PropertyConfigurator::configure(配置文件名稱);??
?
?
[plain]?view plaincopyprint?
- log4cxx::LoggerPtr?logger?=?log4cxx::Logger::getLogger(子Logger名[例如上文中的"logger0"]);??
?
FreeJudger項目中使用的完整配置文件
?
?
下述代碼配置了8個子Logger,用于FreeJudger項目中判題線程的日志:?
?
?
[plain]?view plaincopyprint?
- log4j.additivity.gather?=?false??
- log4j.rootLogger=TRACE??
- ??
- log4j.logger.logger0?=?TRACE,?ap0??
- log4j.logger.logger1?=?TRACE,?ap1??
- log4j.logger.logger2?=?TRACE,?ap2??
- log4j.logger.logger3?=?TRACE,?ap3??
- log4j.logger.logger4?=?TRACE,?ap4??
- log4j.logger.logger5?=?TRACE,?ap5??
- log4j.logger.logger6?=?TRACE,?ap6??
- log4j.logger.logger7?=?TRACE,?ap7??
- log4j.logger.logger8?=?TRACE,?ap8??
- ??
- log4j.additivity.logger0=false??
- log4j.additivity.logger1=false??
- log4j.additivity.logger2=false??
- log4j.additivity.logger3=false??
- log4j.additivity.logger4=false??
- log4j.additivity.logger5=false??
- log4j.additivity.logger6=false??
- log4j.additivity.logger7=false??
- log4j.additivity.logger8=false??
- ??
- log4j.appender.logfile.encoding=UTF-8??
- ??
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender??
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout??
- log4j.appender.stdout.layout.ConversionPattern=%5p?[%t]?(%F:%L)?-?%m%n??
- ??
- log4j.appender.R.MaxFileSize=100KB??
- ??
- log4j.appender.ap0=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap0.ImmediateFlush=true???
- log4j.appender.ap0.File=./0.log??
- log4j.appender.ap0.MaxBackupIndex=10??
- log4j.appender.ap0.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap0.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap1=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap1.ImmediateFlush=true???
- log4j.appender.ap1.File=./1.log??
- log4j.appender.ap1.MaxBackupIndex=10??
- log4j.appender.ap1.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap1.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap2=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap2.ImmediateFlush=true???
- log4j.appender.ap2.File=./2.log??
- log4j.appender.ap2.MaxBackupIndex=10??
- log4j.appender.ap2.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap2.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap3=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap3.ImmediateFlush=true???
- log4j.appender.ap3.File=./3.log??
- log4j.appender.ap3.MaxBackupIndex=10??
- log4j.appender.ap3.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap3.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap4=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap4.ImmediateFlush=true???
- log4j.appender.ap4.File=./4.log??
- log4j.appender.ap4.MaxBackupIndex=10??
- log4j.appender.ap4.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap4.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap5=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap5.ImmediateFlush=true???
- log4j.appender.ap5.File=./5.log??
- log4j.appender.ap5.MaxBackupIndex=10??
- log4j.appender.ap5.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap5.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap6=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap6.ImmediateFlush=true???
- log4j.appender.ap6.File=./6.log??
- log4j.appender.ap6.MaxBackupIndex=10??
- log4j.appender.ap6.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap6.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap7=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap7.ImmediateFlush=true???
- log4j.appender.ap7.File=./7.log??
- log4j.appender.ap7.MaxBackupIndex=10??
- log4j.appender.ap7.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap7.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
- ??
- log4j.appender.ap8=org.apache.log4j.RollingFileAppender??
- log4j.appender.ap8.ImmediateFlush=true???
- log4j.appender.ap8.File=./8.log??
- log4j.appender.ap8.MaxBackupIndex=10??
- log4j.appender.ap8.layout=org.apache.log4j.PatternLayout??
- log4j.appender.ap8.layout.ConversionPattern=%5p?%d{HH:mm:ss}?--?%m%n??
?
轉載于:https://www.cnblogs.com/For-her/p/3922536.html
總結
以上是生活随笔為你收集整理的log4cxx第三篇----使用多个logger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求爱情公寓大电影资源,收费勿扰
- 下一篇: lol安妮冰霜烈焰多少钱