Log4j2同步异步性能比较以及教程和问题(坑)汇总

Posted yangfeiorfeiyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j2同步异步性能比较以及教程和问题(坑)汇总相关的知识,希望对你有一定的参考价值。

线程数:500个   每个线程日志输出次数: 500次 

log4j2其实有两个输出异步日志的方式:AsyncLogger和AsyncAppend

他两的区别在于:

AsyncLogger使用的是无锁高性能队列disruptor,底层是依赖数组实现的RingBuffer和CAS改变下标实现,并且不会出现伪共享缓存,关于disruptor的详情可以看下面这篇

https://ifeve.com/disruptor/     此网站貌似有点不稳定:)

AsyncAppend使用的则是ArrayBlockingQueue,底层还是依赖于ReetrantLock保证生产消费的一致性,而因为涉及到挂起和唤醒线程,所以线程上下文切换的开销就不多说了

PS:下面所有测试均基于AsyncLogger

 

XML文件

技术分享图片

 

全异步和全同步以及混合异步的性能比较

※全异步:

技术分享图片

 
※全同步:

技术分享图片

性能直接差了一个数量级,10倍的差距


※混合异步

技术分享图片

从对比中我们可以看到全异步的性能是最高的,但是在我们真实生产环境中却不能使用全异步,原因除了在有些时候,我们服务器down掉时可能会丢失部分重要日志信息外,还有可能会出现下面这个博客所描述的问题

https://blog.csdn.net/henrydlwang/article/details/78939031

当然,除了这个问题外,还有一个别人踩过的坑也在这里分享一下

https://juejin.im/post/5b7d5b34518825430810be8e

 

最后,则是log4j2的一些使用方法和配置信息

关于log4j2的配置的详细解释

https://www.cnblogs.com/yudar/p/5113655.html

log4j2进阶使用
https://blog.csdn.net/u011054333/article/details/54412360

 

loog4j2如何配置全异步

技术分享图片

loog4j2如何配置混合异步

技术分享图片




以上是关于Log4j2同步异步性能比较以及教程和问题(坑)汇总的主要内容,如果未能解决你的问题,请参考以下文章

Log4j2简介和异步日志梳理

log4j2 异步日志原理及配置

Log4j2同步日志,混合日志和异步日志配置详解

Log4j2中的同步日志与异步日志

日志框架,选择Logback Or Log4j2?

日志框架选型,Logback 还是 Log4j2?