【问题标题】:How to copy Log4J output to a string? [duplicate]如何将 Log4J 输出复制到字符串? [复制]
【发布时间】:2019-05-12 06:06:37
【问题描述】:

我正在使用 IntelliJ 和 Java。 我想将正在运行的程序的输出复制到一个字符串。 此解决方案必须在 IntelliJ 本地和 Jenkins 作业中都有效。

例如,我正在运行的控制台输出如下所示:

log4j:ERROR Could not find value for key log4j.appender.stdot

log4j:ERROR Could not instantiate appender named "stdot". log4j:ERROR

Could not find value for key log4j.appender.stdout log4j:ERROR Could
not instantiate appender named "stdout". [1;34m2019-05-12 08:17:38
Property file env/application.properties parsed successfully[0m

我想将所有这些日志复制到一个字符串中。 我尝试了许多解决方案,但都没有奏效。

【问题讨论】:

  • 有一些设置可以(也)将log4j 输出保存到文件

标签: java logging log4j


【解决方案1】:

您可以将System.setOut()StringWriter 一起使用。

例如:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
System.setOut(new PrintStream(stream));
String output = stream.toString();

【讨论】:

  • 请参阅this answer 了解不重定向 System.out 的解决方案。这也是谷歌上出现的第一个结果,我相信你在提出这个问题时得到了建议。
  • A.我没有阅读该建议...感谢代码,但它不起作用...
  • 是抛出异常还是字符串为空?打印错误的方法可能不是使用System.out,试试System.setErr()
  • 代码编译失败...我附上了一张图片(你看不到吗?)
  • 啊,我的错。我忘记了 setOut 不使用 Writer 类。请参阅我的编辑。它基本上是链接线程的简化版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多