Log4cpp 写本地日志 简单的配置文件 自定义文件名

之前项目中写日志的模块是比较简单的,但是并非多线程安全,而且每写一条日志都调用open函数,写完之后又调用close进行关闭,另外每次调用都会写记录日志的时间,所以非常耗时。

于是就想到了用Log4cpp来写本地日志,但是百度到的东西几乎没有什么可用的,全部都是一个复制一个,真心想找像样一点的东西是没有的。

下面是我写的第一版本的配置文件

log4cplus.rootLogger=DEBUG, DEBUG_MSG,FATAL_MSG 

log4cplus.appender.DEBUG_MSG=log4cplus::RollingFileAppender
log4cplus.appender.DEBUG_MSG.File=${DIR}/${APP}.debug.log
log4cplus.appender.DEBUG_MSG.MaxFileSize=${MAXSIZE}
log4cplus.appender.DEBUG_MSG.MaxBackupIndex=${MAXNUMBER}
log4cplus.appender.DEBUG_MSG.layout=log4cplus::PatternLayout
log4cplus.appender.DEBUG_MSG.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S %Q} [%t] %F(%L) - %m %n
log4cplus.appender.DEBUG_MSG.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.DEBUG_MSG.filters.1.LogLevelMin=DEBUG
log4cplus.appender.DEBUG_MSG.filters.1.LogLevelMax=ERROR
log4cplus.appender.DEBUG_MSG.filters.1.AcceptOnMatch=true
log4cplus.appender.DEBUG_MSG.filters.2=log4cplus::spi::DenyAllFilter


log4cplus.appender.FATAL_MSG=log4cplus::RollingFileAppender
log4cplus.appender.FATAL_MSG.File=${DIR}/${APP}.fatal.log                                                                       
log4cplus.appender.FATAL_MSG.MaxFileSize=50MB
log4cplus.appender.FATAL_MSG.MaxBackupIndex=1000
log4cplus.appender.FATAL_MSG.layout=log4cplus::PatternLayout
log4cplus.appender.FATAL_MSG.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S %Q} [%t] %F(%L) - %m %n
log4cplus.appender.FATAL_MSG.filters.1=log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.FATAL_MSG.filters.1.LogLevelToMatch=FATAL
log4cplus.appender.FATAL_MSG.filters.1.AcceptOnMatch=true
log4cplus.appender.FATAL_MSG.filters.2=log4cplus::spi::DenyAllFilter


该日志配置主要将需要监控的日志写到*.fatal.log(单文件50个,最多可以写1000个文件),将其他日志写到另外一个*.debug.log(进程启动的时候自定义设置单文件大小和数量),由于log4cpp的配置对于文件名的支持不是太好,于是我选择了用环境变量的形式用替代, 代码中调用setenv设置环境变量之后,再调用log4cpp的读配置,这样就可以将文件中自定义了。
因为我也刚开始接触log4cpp, 在写配置文件时,没有将过滤器的关键字写正确,结果导致所有的写日志全部写到debug日志中了,在写LogLevelMin和LogLevelMax的时候,一定要小心(我当时写成了logLevelMIN和LogLevelMAX,当时郁闷了好久,这里其实设置的是DEBUG到ERROR的日志写到debug中,但是由于配置写错了,fatal日志也写会在debug中写),千万不能写错了,某些版本的log4cpp并不提示开发人员,日志等级不正确的。

另外,还有一个疑问未解决,就是日志格式里面调用了 %t,许多文档都解释说是写线程id的,但是实际上我在写日志的时候,这个地方写的是线程地址的十进制格式(由于时间的原因没有看源代码),如果有知道的大神,能否给个答案,小的在此谢过啦。


第一次写博客,跪求大神不要喷我,希望能给有缘人有点帮助。

你可能感兴趣的:(log4cpp)