log4j2 异步日志原理及配置

log4j2通过将打日志流程中的部分阶段进行异步化,使得日志打印性能得到了很大的提升。
要想了解log4j如果实现异步日志,进而提升性能,就需要先了解日志打印的基本过程。

关键概念

在log4j中,有两个重要的概念,分别是LoggerAppender。Logger是负责具体的生产日志数据,我们平时的Logger.info(...)就是生产日志数据的过程。Appender则是负责讲数据搬运到目的地,如console、文件、hive、网络设备等等。

日志流程

image.png

而log42实现异步日志,主要包括以下两种方式:

异步Logger

异步Logger通过使用LMAX Disruptor环形队列和单独的处理线程,避免了锁的竞争,从而实现更高的吞吐量。队列大小默认4096,通过以下参数,可以开启异步日志。

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

异步Appender

异步Appender则是使用了java中的ArrayBlockingQueue,默认队列大小1024。log4j2官方测试,asyncLogger相比asyncAppender有更好的表现。

image.png

题外

是否可以同时使用AsyncLogger + AsyncAppender?同时使用是否有更好表现?
据stackoverflow上回答,AsyncLogger是更新的异步机制,有更好的表现。AsyncAppender是之前的异步机制。同时使用也不会增加性能表现。见
https://stackoverflow.com/questions/24177601/difference-between-asynclogger-and-asyncappender-in-log4j2

参考资料

https://logging.apache.org/log4j/2.x/manual/async.html
https://www.cnblogs.com/yeyang/p/7944906.html
https://bryantchang.github.io/2019/01/15/log4j2-asyncLogger/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,523评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,461评论 0 6
  • 简介 Apache Log4j 2 is an upgrade to Log4j that provides si...
    sheen口开河阅读 17,452评论 0 4
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 8,568评论 0 0
  • 今日,正装模作样的工作之时,忽然感觉抽屉里有震动的声音,因平时手机都是随手一扔,铃声也是简单抒情的音乐,很多时候,...
    尘间小妖阅读 1,702评论 0 0

友情链接更多精彩内容