Java log4j并不总是记录最后一行

时间:2013-08-30 17:44:34

标签: java command-line log4j output

我有一个测试程序(我没写过)会给出一个非常奇怪的错误,这只会在某些时候发生。在程序结束时,使用

输出包含测试报告的字符串
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命令提示符的东西?我知道这是一个非常模糊的问题,但如果有人有任何想法,他们将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

万一你在代码中有它,你可以尝试删除这句话:

System.exit(0);