当前位置: 首页 > 知识库问答 >
问题:

LOG4j2异步记录器阻塞功能

洪飞白
2023-03-14

背景:

在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

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

问题:

因此,为了确定我在这里问的是因为我在文档中没有看到任何内容,如果一个文档中输入的日志多于输出的日志(假设我们将它们存储在一个数据库中,并且插入需要一段时间),那么当使用AsyncLogger时,会超过ringbuffersize,那么额外的日志会发生什么情况?主线程会以任何方式减慢吗?

谢谢!

共有2个答案

元英朗
2023-03-14

如果在AsyncAppender上设置了阻塞,并且队列已满,则事件将被传递到配置了errorRef属性的Appender(如果配置了一个)。

但是,您还询问了使用异步记录器时会发生什么情况,异步记录器是独立的。有了它,一切都是异步的,我敢肯定它的处理方式与AsyncAppender不同。

阙新觉
2023-03-14

对于异步记录器,如果你的appender跟不上html" target="_blank">应用程序的日志记录速率,Ring缓冲区最终会填满。当环缓冲区已满时,记录器将阻止尝试向环缓冲区添加日志事件,因此是的,应用程序线程将受到影响。

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

仅供参考,log4j 2附带的最快的appender是RandomAccessFileAppender(及其滚动变体)。

下一个版本(2.5.1)将有一个功能,允许用户删除事件(例如:DEBUG和TRACE事件),当环形缓冲区满80%或更多时。

 类似资料:
  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4

  • 我正在尝试设置log4j2以使用异步记录器将所有消息记录到滚动文件中。 是否有一种方法可以创建另一个记录程序来捕获所有事件?还有别的想法吗? 下面是我的log4j2.xml:

  • 基于https://logging.apache.org/log4j/2.x/manual/async.html我想使用混合同步和异步记录器的方法,以便从所有同步记录器的性能改进中获益。 基准代码: Log4j2配置正是文档中的配置(https://logging.apache.org/log4j/2.x/manual/async.html): 使用这种混合的同步/异步记录器配置,我可以每秒获得大

  • 我认为下面的流量链将通过事件循环放置/执行(像JS)。因此,运行下面的代码将首先打印阻塞循环&然后将执行通量链。 但是,整个通量总是先执行,然后才移动到循环。[我确实有一些语句正在阻塞。但是有两个阶段] 当我们使用reactor时,通过使用一些调度程序来实现异步/非阻塞行为的唯一方法? 如果我不使用任何调度器,并让代码使用当前线程执行,那么即使对于IO密集型应用程序,使用WebFlux而不是Spr

  • 本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看

  • 使用log4j2,我很难让同步记录器和异步记录器一起工作。 从这里以Apache文档(标题为混合同步和异步记录器)为例,运行下面的应用程序将简单地创建日志文件,但不向其写入任何内容。我也不确定添加两个记录器指向同一个appender,但它的Apache留档,所以我假设这是好的。 LOG4J2配置 pom.xml 应用 但是,如果我更改log4j2配置并修改loggers元素以读取以下内容,我将在日