我通过在其中添加我自己的 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。
我已将其导出为带有 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 万条
请帮助我了解如何同步日志记录,如果我做错了什么,请告诉我。