注意:该功能须要高版本才能支持,如1.0.11。
AsyncAppender,异步记录日志。
工做原理:
当Logging Event进入AsyncAppender后,AsyncAppender会调用appender方法,append方法中在将event填入Buffer(这里选用的数据结构为BlockingQueue)中前,会先判断当前buffer的容量以及丢弃日志特性是否开启,当消费能力不如生产能力时,AsyncAppender会超出Buffer容量的Logging Event的级别,进行丢弃,做为消费速度一旦跟不上生产速度,中转buffer的溢出处理的一种方案。AsyncAppender有个线程类Worker,它是一个简单的线程类,是AsyncAppender的后台线程,所要作的工做是:从buffer中取出event交给对应的appender进行后面的日志推送。
从上面的描述中能够看出,AsyncAppender并不处理日志,只是将日志缓冲到一个BlockingQueue里面去,并在内部建立一个工做线程从队列头部获取日志,以后将获取的日志循环记录到附加的其余appender上去,从而达到不阻塞主线程的效果。所以AsynAppender仅仅充当事件转发器,必须引用另外一个appender来作事。
在使用AsyncAppender的时候,有些选项仍是要注意的。因为使用了BlockingQueue来缓存日志,所以就会出现队列满的状况。正如上面原理中所说的,在这种状况下,AsyncAppender会作出一些处理:默认状况下,若是队列80%已满,AsyncAppender将丢弃TRACE、DEBUG和INFO级别的event,从这点就能够看出,该策略有一个惊人的对event丢失的代价性能的影响。另外其余的一些选项信息,也会对性能产生影响,下面列出经常使用的几个属性配置信息: