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

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

最佳答案

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

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

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

System.exit(0);

关于Java log4j 并不总是记录最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538668/

相关文章:

java - 如何只转义消息而不是 log4j 中的所有行?

java - Spring MVC 4.0中JSON表单参数的自动转换

java - Java/WICKET 中用于自动化和设计目的的 HTML Id 命名约定

java - 如何从 fragment 中的工具栏在 ListView 中搜索

linux - 如何将 bash 命令行重写为 zsh?

java - 将日志记录添加到实用程序包

java - Spring 卡夫卡 : Subscribe to a new Topic Pattern during Runtime

来自命令行的具有分类器快照依赖项的 Maven 发布插件

command-line - 为什么 Windows 命令外壳告诉我使用不同的命令然后说该命令不存在?

hadoop - hadoop日志文件夹中的.out文件是什么?删除它们安全吗?