利用log4cplus配置文件生成日志

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

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在默认分类分类目录。将固定链接加入收藏夹。