我有一个测试程序(不是我写的)给出了一个非常奇怪的错误,这种错误只在某些时候发生。在程序结束时,使用
输出包含测试报告的字符串logger.warn(reportString);
从 1/10 到 1/3 的任何地方尝试(它会变化)这个字符串没有被显示,但它之前的所有内容。 在此之前,我添加了这一行以确保始终正确创建字符串,这是因为它每次都给出相同的长度。
logger.info("Length: " + reportString.length());
为了实验,我在后面添加了另一行日志记录,所以程序的结尾现在看起来像这样:
logger.info("Length: " + reportString.length());
logger.warn(reportString);
logger.info("REACHED END OF PROGRAM");
执行此操作时,reportString 似乎总是被打印/记录,但“REACHED END OF PROGRAM”字符串仅在大约 50% 的时间内被打印/记录。也许这与我的 Windows 命令提示符有关?我知道这是一个非常模糊的问题,但如果有人有任何想法,他们将不胜感激。
最佳答案
也许您需要刷新所有缓冲日志以将所有日志发送到输出。添加下一个:
logger.warn(reportString);
LogManager.shutdown();
以防万一你的代码中有它,你可以尝试删除句子:
System.exit(0);
关于Java log4j 并不总是记录最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538668/