使用Log4Cplus+配置文件打印日志

Posted merlinzjl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Log4Cplus+配置文件打印日志相关的知识,希望对你有一定的参考价值。

开发环境:win7+VS2015 msvc14

版本:log4CPlus1.2.1

API参考:https://log4cplus.sourceforge.io/docs/html/index.html

 

前两天工作中使用到了Log4Cplus来记录程序日志,下面总结下通过配置文件来使用Log4Cplus库。

 

基本要求:日志文件按天命名,每天生成一个文件。

配置文件:

log4cplus.rootLogger=ALL, LegendPrint_Run_LOG

 

//指定append类型,因为我们这需要按天来生成,同时文件名也要可以按时间来命名

//所以选择TimeBasedRollingFileAppender

log4cplus.appender.LegendPrint_Run_LOG = log4cplus::TimeBasedRollingFileAppender

 

//指定文件路径名,可以是绝对路径也可以是相对路径,可以使用时间匹配符来动态定义文件名。log4Cplus会根据你使用到的时间自动创建文件。比如,你的文件名是由年月构成,那每个月都会生成新的文件。

log4cplus.appender.LegendPrint_Run_LOG.FilenamePattern= log %d{yyyy-MM-dd}.log

 

//设置为true表示向日志文件中追加信息而不是截断。

log4cplus.appender.LegendPrint_Run_LOG.Append = true

 

//设置最大的文件数,超过这个数值删除时间最久的文件。

log4cplus.appender.LegendPrint_Run_LOG.MaxHistory = 999

 

//当设置为true表示每一次有append event事件,输出流就会被刷新到文件中。

log4cplus.appender.LegendPrint_Run_LOG.ImmediateFlush = true

 

//默认值为true关闭的时候回滚到一个新的文件中,有bug,我们设置为false,不使用这个功能。

log4cplus.appender.LegendPrint_Run_LOG.RollOnClose = false

 

//如果为true,那么如果指定的日志路径名中如果有文件夹不存在,则会创建文件夹。

log4cplus.appender.LegendPrint_Run_LOG.CreateDirs = true

 

//指定消息输出的格式

log4cplus.appender.LegendPrint_Run_LOG.layout = log4cplus::PatternLayout

log4cplus.appender.LegendPrint_Run_LOG.layout.ConversionPattern =  %D{%Y-%m-%d %H:%M:%S,%q}: %-5p %m%n

 

//指定消息输出的级别,这边使用的是Range,指定范围,在这个范围内都可以使用。

log4cplus.appender.LegendPrint_Run_LOG.filters.1 = log4cplus::spi::LogLevelRangeFilter

log4cplus.appender.LegendPrint_Run_LOG.filters.1.LogLevelMin = TRACE

log4cplus.appender.LegendPrint_Run_LOG.filters.1.LogLevelMax = FATAL

//这里我们还可以使用LogLevelMatchFilter来指定消息输出级别

//log4cplus.appender.LegendPrint_Error_LOG.filters.1=log4cplus::spi::LogLevelMatchFilter

//log4cplus.appender.LegendPrint_Error_LOG.filters.1.LogLevelToMatch=ERROR

//true表示如果匹配了filter指定的范围则输出,如果是false则反之。

log4cplus.appender.LegendPrint_Run_LOG.filters.1.AcceptOnMatch = true

//表示清空过滤器的设置,这边设置的顺序和执行的顺序是相反的,即log4Cplus会先清空//然后再设置filter的级别。

log4cplus.appender.LegendPrint_Run_LOG.filters.2 = log4cplus::spi::DenyAllFilter

 

使用时:

log4cplus::PropertyConfigurator::doConfigure(“配置文件.properties”);

logger = log4cplus::Logger::getRoot();//指定使用root

 

再看一个用例:

#配置文件(其它日志级别配置相同):

log4cplus.logger.console=TRACE,logConsole

log4cplus.logger.root=TRACE,ERROR_MSGS, DEBUG_MSGS, INFO_MSGS

<br>#不向默认对象(rootLogger)输出,因此信息只能输出到文件

log4cplus.additivity.file=false

 

###############################CONSOLE##########################################

log4cplus.appender.logConsole=log4cplus::ConsoleAppender

log4cplus.appender.logConsole.Encoding=utf-8

log4cplus.appender.logConsole.layout=log4cplus::PatternLayout

log4cplus.appender.logConsole.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n

 

################################DEBUG####################################

#设置日志追加到文件尾

log4cplus.appender.DEBUG_MSGS=log4cplus::TimeBasedRollingFileAppender

log4cplus.appender.DEBUG_MSGS.FilenamePattern=debug.%d{yyyyMMdd}.log

log4cplus.appender.ERROR_MSGS.Schedule=DAILY

log4cplus.appender.ERROR_MSGS.MaxHistory=365

 

log4cplus.appender.DEBUG_MSGS.Append=true

log4cplus.appender.DEBUG_MSGS.RollOnClose=false

log4cplus.appender.DEBUG_MSGS.CreateDirs=true

 

#设置日志文件大小

log4cplus.appender.DEBUG_MSGS.MaxFileSize=10MB

 

#设置生成日志最大个数

log4cplus.appender.DEBUG_MSGS.MaxBackupIndex=5

log4cplus.appender.DEBUG_MSGS.Encoding=utf-8

log4cplus.appender.DEBUG_MSGS.layout=log4cplus::PatternLayout

 

#设置日志打印格式

log4cplus.appender.DEBUG_MSGS.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n

 

#匹配相同日志级别,只有wx_uservedio日志才输入到该文件中

log4cplus.appender.DEBUG_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter

log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelToMatch=DEBUG

log4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=true

log4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter

 

################################ERROR####################################

#设置日志追加到文件尾

log4cplus.appender.ERROR_MSGS=log4cplus::TimeBasedRollingFileAppender

log4cplus.appender.ERROR_MSGS.FilenamePattern=error.%d{yyyyMMdd}.log

log4cplus.appender.ERROR_MSGS.Schedule=DAILY

log4cplus.appender.ERROR_MSGS.MaxHistory=365

 

log4cplus.appender.ERROR_MSGS.Append=true

log4cplus.appender.ERROR_MSGS.RollOnClose=false

log4cplus.appender.ERROR_MSGS.CreateDirs=true

 

#设置日志文件大小

log4cplus.appender.ERROR_MSGS.MaxFileSize=10MB

 

#设置生成日志最大个数

log4cplus.appender.ERROR_MSGS.MaxBackupIndex=5

log4cplus.appender.ERROR_MSGS.Encoding=utf-8

log4cplus.appender.ERROR_MSGS.layout=log4cplus::PatternLayout

 

#设置日志打印格式

log4cplus.appender.ERROR_MSGS.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m%n

 

#匹配相同日志级别,只有wx_uservedio日志才输入到该文件中

log4cplus.appender.ERROR_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter

log4cplus.appender.ERROR_MSGS.filters.1.LogLevelToMatch=ERROR

log4cplus.appender.ERROR_MSGS.filters.1.AcceptOnMatch=true

log4cplus.appender.ERROR_MSGS.filters.2=log4cplus::spi::DenyAllFilter

 

################################INFO####################################

#设置日志追加到文件尾

log4cplus.appender.INFO_MSGS=log4cplus::TimeBasedRollingFileAppender

log4cplus.appender.INFO_MSGS.FilenamePattern=info.%d{yyyyMMdd}.log

log4cplus.appender.INFO_MSGS.Schedule=DAILY

log4cplus.appender.INFO_MSGS.MaxHistory=365

 

log4cplus.appender.INFO_MSGS.Append=true

log4cplus.appender.INFO_MSGS.RollOnClose=false

log4cplus.appender.INFO_MSGS.CreateDirs=true

 

#设置日志文件大小

log4cplus.appender.INFO_MSGS.MaxFileSize=10MB

 

#设置生成日志最大个数

log4cplus.appender.INFO_MSGS.MaxBackupIndex=5

log4cplus.appender.INFO_MSGS.Encoding=utf-8

log4cplus.appender.INFO_MSGS.layout=log4cplus::PatternLayout

 

#设置日志打印格式

log4cplus.appender.INFO_MSGS.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n   

 

#匹配相同日志级别,只有INFO日志才输入到该文件中

log4cplus.appender.INFO_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter

log4cplus.appender.INFO_MSGS.filters.1.LogLevelToMatch=INFO

log4cplus.appender.INFO_MSGS.filters.1.AcceptOnMatch=true

log4cplus.appender.INFO_MSGS.filters.2=log4cplus::spi::DenyAllFilter

 

使用时:

Logger LogConsole = Logger::getInstance(LOG4CPLUS_TEXT("console"));

Logger LogRoot = Logger::getInstance(LOG4CPLUS_TEXT("root"));

 

打印日志时使用 LOG4CPLUS_TRACEDEBUGINFOWARN等宏函数打印日志。

std::stringstream  _ss;

LOG4CPLUS_TRACE(LogConsole , _ss.str().c_str());

以上是关于使用Log4Cplus+配置文件打印日志的主要内容,如果未能解决你的问题,请参考以下文章

log4cplus:DailyRollingFileAppender 配置/MaxBackupIndex 不起作用

配置 log4cplus 以在运行时记录到自定义文件

180325-log4cplus

log4cplus库的properties文件配置

如何将 log4cplus 日志文件更改为 utf8

如何验证 Java 日志记录属性文件?