0

我使用以下日志配置创建了一个简单的应用程序

      <appenders>
         <RollingRandomAccessFile  name="SUMMARY_ALL" fileName="./logs/summary.log" 
        filePattern="logs/$${date:yyyy-MM}/summary-%d{yyyy-MM-dd-HH}-%i.log.gz" immediateFlush="false" append="false">
        <PatternLayout>
            <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="6"
                modulate="true" />
            <SizeBasedTriggeringPolicy size="10 MB" />
        </Policies>
        </RollingRandomAccessFile>
       </appenders>

记录器为:

  <loggers>
    <root level="DEBUG" includeLocation="false">
        <AppenderRef ref="SUMMARY_ALL" />
    </root>
</loggers>

当我运行它时,我总是让 AsyncLogger 处于等待状态。任何人都可以请帮忙。附上 ThreadDump 的快照

在此处输入图像描述

4

1 回答 1

0

这个问题也被发布到 log4j 邮件列表中。讨论总结:

AsyncLogger 线程大部分时间会处于等待状态,要么等待新工作的到来,要么等待阻塞的 I/O 调用返回。

这是预期的行为。只要事件被正确记录,这不是问题。

关于 AsyncAppenders 和 AsyncLoggers 之间区别的详细信息可以在 Christian Grobmeier 的博客文章http://www.javacodegeeks.com/2013/07/log4j-2-performance-close-to-insane.html中找到。

于 2013-10-03T22:36:43.357 回答