繁体   English   中英

LOG4j2异步记录器阻止功能

[英]LOG4j2 async logger blocking functionality

背景:

在log4j2中,当使用asyncappender时,您可以将记录器的参数“ blocking”设置为false,这样,溢出缓冲区大小的所有日志都将被丢弃,并且不会减慢主线程的速度。 (请参见asyncAppender https://logging.apache.org/log4j/2.x/manual/appenders.html下的此处)

我正在将我们的应用程序升级到此处的精美asyncLogger结构: https ://logging.apache.org/log4j/2.x/manual/async.html

虽然我可以设置环形缓冲区的大小,但没有看到任何说明可以阻止它阻止应用程序主线程,

题:

所以可以肯定的是,我问这是因为我没有在文档中看到任何东西,如果有更多的日志输入而没有输出的日志(例如,我们将它们存储在数据库中并且插入需要花费一段时间),所以超出了ringbuffersize使用异步记录器时,多余的日志会怎样? 并且主线程会以任何方式减慢速度吗?

谢谢!

使用异步记录器,如果您的附加程序无法跟上应用程序的日志记录速率,则环形缓冲区最终将填满。 当环形缓冲区已满时,记录器将阻止尝试向环形缓冲区添加日志事件,因此,应用程序线程将受到影响。

默认环形缓冲区大小如此之大的原因之一是,它可以处理日志事件的“突发”而不会影响应用程序。 但是,选择适合(可以处理)应用程序持续日志记录速率的附加程序很重要。 (以目标负载的2或3倍进行测试是一个好主意。)

仅供参考,log4j 2随附的最快的追加器是RandomAccessFileAppender (及其Rolling变体 )。

下一个版本(2.5.1) 将具有一项功能 ,允许用户在环形缓冲区已满80%或更多时丢弃事件(例如DEBUG和TRACE事件)。

如果在AsyncAppender上设置了阻止并且队列已满,则显示该事件将传递给在errorRef属性上配置的Appender(如果已配置)。

但是,您还询问了使用异步记录器时会发生什么情况,这是分开的。 这样,一切都是异步的,我可以肯定处理方式与AsyncAppender不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM