回滚丢失我的日志消息到文件

我编写了一个测试程序来validationlog4j上logback的性能改进。 但令我惊讶的是,我遇到了这个奇怪的问题。 我正在使用他们的Async和文件追加程序将一些200k日志消息循环写入文件。 但是,每次,它只记录大约140k左右的消息并在此之后停止。 它只打印我的上一个日志语句,表明它已将所有内容写入缓冲区并且程序终止。 如果我只使用Log4j运行相同的程序,我可以在日志文件中看到所有200k消息。 是否有任何基本的架构差异使这种情况发生? 反正有没有避免它? 我们正在考虑从log4j切换到logback,现在这让我重新思考。

这是我的logback configuraiton:

   %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n     logback.log  %date %level [%thread] %logger{10} [%file:%line] %msg%n          

这是我的代码——————

  public static void main(String[] args) throws InterruptedException { org.slf4j.Logger logbackLogger = LoggerFactory .getLogger(LogbackTest.class); List runs = Arrays.asList(1000, 5000, 50000, 200000); ArrayList logbackRuntimes = new ArrayList(4); for (int run = 0; run Starting run: " + (run + 1)); // logback test long stTime = System.nanoTime(); int i = 0; for (i = 1; i <= runs.get(run); i++) { Thread.sleep(1); logbackLogger .info("This is a Logback test log, run: {}, iter: {}", run, i); } logbackRuntimes.add(System.nanoTime() - stTime); logbackLogger.info("logback run - " + (run + 1) + " " + i); } Thread.sleep(5000); // print results logbackLogger.info("Run times:"); logbackLogger .info("Run\tNoOfMessages\tLog4j Time(ms)\tLogback Time(ms)"); for (int run = 0; run < runs.size(); run++) { logbackLogger.info((run + 1) + "\t" + runs.get(run) + "\t" + logbackRuntimes.get(run) / 10e6d); } } 

根据文件 :

[…]默认情况下,当剩余少于20%的队列容量时,AsyncAppender将丢弃级别为TRACE,DEBUG和INFO的事件,仅保留级别WARN和ERROR的事件。 当队列容量小于20%时,此策略可确保以非TRACK,DEBUG和INFO级别的事件丢失事件,从而确保对日志事件的非阻塞处理(因此具有出色的性能)。 通过将discardingThreshold属性设置为0(零)可以防止事件丢失。