我有一个测试程序(我没写过)会给出一个非常奇怪的错误,这只会在某些时候发生。在程序结束时,使用
输出包含测试报告的字符串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命令提示符的东西?我知道这是一个非常模糊的问题,但如果有人有任何想法,他们将不胜感激。
答案 0 :(得分:0)
这可能与log4j如何缓冲它输出的数据有关,尝试在记录器打印的最后一个字符串中显式添加\ n,并查看它现在是否一致打印。
答案 1 :(得分:0)
也许您需要刷新所有缓冲的日志以将所有内容发送到输出。添加下一个:
logger.warn(reportString);
LogManager.shutdown();
万一你在代码中有它,你可以尝试删除这句话:
System.exit(0);