gpt4 book ai didi

java - Log4j2 中 AsyncLogger 和 AsyncAppender 的区别

转载 作者:IT老高 更新时间:2023-10-28 20:53:09 26 4
gpt4 key购买 nike

我了解 AsyncAppender 在单独的线程中执行附加工作。他们为此使用 ArrayBlockingQueue。

AsyncLogger 使用 LMAX 中断库将日志事件从一个应用程序线程移动到另一个线程,与 AsyncAppender 相比它更快。

我的问题是,如果 AsyncLogger 更有效地完成了它所做的工作,为什么我们在 log4j2 中有 AsyncAppender。

如果我们将 AsyncAppender 与 AsyncLogger 一起使用会怎样? AsyncLogger 和 AsyncAppender 还有什么区别吗?

最佳答案

没错,它们的目的几乎相同,所以我可以理解您的问题:“为什么有两种选择”?

作为背景,AsyncAppender 从一开始就在 Log4j2 中,去年 3 月(2014 年)添加了 Async Loggers。这就是现在的情况。

log4j 团队目前并未认真考虑移除 AsyncAppender。要记住的一件事是,Async Loggers 有一个外部依赖项(LMAX 中断器 jar),其中 AsyncAppender 仅与 log4j2-api 和 log4j2-core jar 一起工作。

要回答您的最后一个问题,可以将 AsyncAppender 与 Async Loggers 结合使用,但您不会有任何收获。这尚未经过测试。我还没有检查,但是在将日志事件从 Async Logger 线程移交给 AsyncAppender 线程时,位置信息可能会丢失。我不建议这样做。

更新(2014 年 6 月 23 日):我做了一些测试,将 AsyncAppender 与 AsyncLoggers 结合使用时存在一些问题。这些在 RC2 中是固定的。我仍然不建议这样做,因为它只是添加了另一个使用 CPU/内存的中间步骤,而没有任何贡献。

更新 (2016/7/20):另一个区别:从 2.6 版开始,Log4j 2 可以使用 Async Loggers 实现无垃圾,但不能使用 AsyncAppender。


在下面的评论中回答您的第二个问题:AsyncAppender 有自己的队列和线程,其中 AsyncLoggers 使用 LMAX Disruptor ringbuffer 作为队列并使用 Executor 线程。

关于java - Log4j2 中 AsyncLogger 和 AsyncAppender 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24177601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com