log4cplus通过PropertyConfigurtor类实现了基于脚本配置的功能,通过脚本可以完成对logger、appender和layout的配置
配置步骤:
1.配置Appender名称
枚举:
log4cplus.appender.AppenderName1=log4cplus::ConsoleAppender
log4cplus.appender.AppenderName2=log4cplus::FileAppender
log4cplus.appender.AppenderName3=log4cplus::RollingFileAppender
log4cplus.appender.AppenderName4=log4cplus::DailyRollingFileAppender
log4cplus.appender.AppenderName5=log4cplus::SocketAppender
2.配置Layout
可以选择不设置、TTCCLayout或PatternLayout
设置TTCCLayout如下所示:
log4cplus.appender.AppenderName.layout=log4cplus::TTCCLayout
设置PatternLayout如下所示:
log4cplus.appender.AppenderName.layout=log4cplus::PatternLayout
log4cplus.appender.AppenderName.layout.ConversionPattern= %d [%t] <%-5p> – %m%n
3.配置Filter
可选择的Filter,LogLevelMatchFilter,LogLevelRangeFilter和StringMatchFilter
设置之后输出的内容会有所改变
4.配置Logger
对于RootLogger如下所示:
log4cplus.rootLogger=[LogLevel],appenderName,appenderName,…..
对于non-root logger如下所示:
log4cplus.logger.logger_name=[LogLevel|INHERITED],appenderName,…..
5.加载配置
PropertyConfigurator::doConfigure(“log4cplus.cfg”);
6.举例代码
6.1对Appender对象进行配置,包括设置Appender名称,Layout和Filter及相关参数。
设置Appender名称及参数如下:
log4cplus.appender.AppenderName=log4cplus::FileAppender
log4cplus.appender.AppenderName.File=d:\testlog.log
6.2设置Layout及参数,如:
log4cplus.appender.AppenderName.layout=log4cplus::PatternLayout
log4cplus.appender.AppenderName.layout.ConversionPattern = %d [%t] %-5p – %m%n
6.3设置Filter及参数,如:
log4cplus.appender.AppenderName.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.AppenderName.filters.1.LogLevelMin=DEBUG
log4cplus.appender.AppenderName.filters.1.LogLevelMax=INFO
log4cplus.appender.AppenderName.filters.1.AcceptOnMatch=true
log4cplus.appender.AppenderName.filters.2=log4cplus::spi::DenyAllFilter
6.4 设置Logger对象
log4cplus.rootLogger= TRACE,AppenderName
(注意:AppenderName 就是上面几个步骤用到的,上面用到几个这里就写几个,多个中间用逗号隔开)
将以上配置保存到文件,比如:./config/log4cplus.cfg中,则使用如下代码就可以生成日志:
int main(int argc, char ** argv) { log4cplus::initialize(); tstring tsFilePath("log4cplus.cfg"); // 加载配置文件(根据实际情况,填写绝对路径) PropertyConfigurator::doConfigure(tsFilePath); Logger logger = Logger::getRoot(); LOG4CPLUS_DEBUG(logger, "This is a DEBUG message"); LOG4CPLUS_INFO(logger, "This is a INFO message"); LOG4CPLUS_WARN(logger, "This is a WARN message"); LOG4CPLUS_ERROR(logger, "This is a ERROR message"); LOG4CPLUS_FATAL(logger, "This is a FATAL message"); return 0; }
注意:在调试时,debug模式下要用log4cplus_d.a,release模式下用log4cplus.a,否则会产生很多意想不到%E