Log4j异步存储日志

来源:互联网 发布:汉朝兴盛的转折点 知乎 编辑:程序博客网 时间:2024/05/21 18:37

      在网上看了几篇文章,对Log4j异步存储机制有一定了解。AsyncAppender——它是自己收集所有的events到一个buffer中,再用一个单独的线程来服务(dispatch)收集过来的events到具体的appender来真正记录日志。(需要注意的是这个类只能通过xml的方法来配置使用)
      浏览一下这个类的代码可以看出。它默认用一个大小为128的arraylist来作为event收集的buffer。别起了一个daemon thread来做diaptch event.而这个类里需求注意线程同步问题的地方有buffer,append方法。

      对于采用同步和异步要看使用的环境。总体来说分两个角度看。一、异步传输时线程同步产生的开销相对于多线程提升的性能是否值得。二、在缓存的设计上,当buffer写满时需要调用appender来真正记录时会产生阻塞,如果buffer过小则会产生大量阻塞,反而降低效率。

      所以对于不间断的产生大量日志的系统来说,同步记录方式为好。只有对于大量并发线程产生随机日志并且需要多个appender来处理event的系统来说,才需要采用异步方式,并且要将buffer设置成较大为好。