gpt4 book ai didi

logging - Logback asyncAppender 似乎不是线程安全的

转载 作者:行者123 更新时间:2023-12-05 00:08:23 24 4
gpt4 key购买 nike

我通过在其中添加自己的 SUMMARY_APPENDER 创建了一个 AsyncAppender。

ASYNC Appender 如下所示

 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>2</discardingThreshold>
<appender-ref ref="SUMMARY_APPENDER" />
<!-- <appender-ref ref="PROCESSING" /> -->
</appender>

我创建了另一个 SUMMARY_APPENDER

<appender name="SUMMARY_APPENDER"
class="com.my.test.logger.async.MyRollingAppender">
<file>./logs/summary.log</file>
<rollingPolicy class="com.my.test.logger.async.MyTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./logs/%d{yyyy-MM-dd,aux}/summary.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<TimeBasedFileNamingAndTriggeringPolicy
class="com.my.test.logger.async.MySizeTimeBasedPolicy">
<maxFileSize>10MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
%d{ISO8601} [%t] %p %c %L - %m%n
</pattern>
</encoder>
</appender>

RollingPolicy 由我的自定义 Appenders 正确扩展。

  • 我已将其导出为带有 logback.xml 的自定义 jar。

  • 我将它添加到新 java 项目的类路径中。

  • 运行一些并发程序来记录,以确保所有线程都同时正确地记录它。

程序如下,我创建了 TestLogger1 ,2...5 并运行了它们。

 public class TestingLogger {
private static Logger log = LoggerFactory.getLogger(TestingLogger.class);
public static void main(String[] args) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
for (int i = 1; i < 100000; i++) {
log.debug(" Testing Logger " + i);
}
}
}

每个 Logger 都有 10 万条日志,所以最后我预计有 50 万条

请帮助我了解如何同步日志记录,如果我做错了什么,请告诉我。

最佳答案

来自手册:

丢弃阈值

默认情况下,当阻塞队列剩余容量的20%时,它会丢弃TRACE、DEBUG和INFO级别的事件,只保留WARN和ERROR级别的事件。要保留所有事件,请将 discardingThreshold 设置为 0。

因此在您的配置中将此属性从 2 设置为 0,您应该会看到所有消息都到达日志文件中。

关于logging - Logback asyncAppender 似乎不是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17612589/

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