log4j2 异步日志原理及配置

log4j2 异步日志原理及配置,第1张

log4j2通过讲打日志流程中的部分阶段进行异步化,使得日志打印性能得到了很大的提升。

要想了解log4j如果实现异步日志,进而提升性能,就需要先了解日志打印的基本过程。

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

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

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

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

是否可以同时使用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/

目前所有的日志记录方式采用的都是同步的方式,即直接将日志写入文件。

在多应用的时候,这种效果会导致一定的线程运行延迟,所以可以采用异步的方式处理。

logback AsyncAppender目前在logback 1.0.11及以上版本存在

集成到项目

异步日志记录是在原来logback上的扩展,并不是替代方式,所以只需要在原来的配置文件上添加一下配置


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11262272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存