关于log4cplus中AsyncAppender的配置

由于工作用log4cplus来记录日志,最近发现日志量大的时侯严重的影响了程序的处理效率,遂稍微研究了一下log4cplus, 发现所用到的RollingFileAppender是同步的,所以想改成异步的Appender比较下,但所用版本没有异步Appender,遂上官网看看了,发现自log4cplus.1.1.0来增加了AsyncAppender, 这个Appender支持异步的记录日志文件,但作者并没有更新文档(或是我没找到), 不知关于AsyncAppender的配置文件该如何写,稍微研究了下代码并摸索了,发现可以这样写(关于log4cplus的基本用法,google之):

log4cplus.rootLogger=TRACE, A1

log4cplus.appender.A1=log4cplus::AsyncAppender
log4cplus.appender.A1.Appender=log4cplus::RollingFileAppender
log4cplus.appender.A1.Appender.File=xxx.log
log4cplus.appender.A1.Appender.QueueLimit=10000
log4cplus.appender.A1.Appender.ImmediateFlush=false
log4cplus.appender.A1.Appender.MaxFileSize=1000MB
log4cplus.appender.A1.Appender.MaxBackupIndex=5
log4cplus.appender.A1.Appender.layout=log4cplus::PatternLayout
log4cplus.appender.A1.Appender.layout.ConversionPattern=%D{[%Y-%m-%d %H:%M:%S.%q]} [%-5p] [%c{2}] [%F:%L]%m%n


通过以发现AsyncAppender是异步到添加到RollingFileAppender上去的,其中QueueLimit属于表示存在于AsyncAppender队列中未处理的最大事件数量(目前默认为100),如果未处理的日志数量等于这个数个值,新的日志输出将会阻塞,直至未处理的值小于QueueLimit的值。


当然,异步日志的风险是当程序crash时,会丢失所有未输出的日志,对查看程序crash原因会造成一定的影响。


AsyncAppender是一个典型的生产者-消费者模型, 用一个队列来保存未处理的日志,一个线程来记录所有的日志。

你可能感兴趣的:(关于log4cplus中AsyncAppender的配置)