3

我有一个测试程序(不是我写的),它给出了一个非常奇怪的错误,这只在某些时候发生。在程序结束时,使用输出包含测试报告的字符串

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 命令提示符有关?我知道这是一个非常模糊的问题,但如果有人有任何想法,他们将不胜感激。

4

2 回答 2

1

也许您需要刷新所有缓冲的日志以将所有日志发送到输出。添加下一个:

logger.warn(reportString);
LogManager.shutdown();

以防万一您的代码中有它,您可以尝试删除该句子:

System.exit(0);
于 2013-08-30T17:56:34.303 回答
0

这可能与 log4j 如何缓冲它输出的数据有关,尝试在记录器打印的最后一个字符串中显式添加 \n,并查看它现在是否一致地打印。

于 2013-08-30T17:47:53.720 回答