将进程的输出写入 log4j

JF *_*ier 5 java log4j process

我使用 ProcessBuilder 启动一个进程,并希望将输出写入 log4j。我怎样才能实现这个目标?

我知道我可以将进程的输出重定向到一个文件,然后读回该文件,但我希望有一些更简单的方法。

如果有更简单的解决方案,我想避免编写自己的 OutputStream 实现。我希望我不是第一个想要将 ProcessBuilder 的输出作为“好的 java 对象”(如

 List<String> 
Run Code Online (Sandbox Code Playgroud)

或者其他容易处理的东西。

THe*_*per 1

您可以使用Process.getInputStream()和/或Process.getErrorStream()检索输出并将其写入 log4j。例如:

private static final Logger LOG = Logger.getLogger(MyClass.class);
....
ProcessBuilder pBuilder = new ProcessBuilder("MyProcess").redirectErrorStream(true);
Process process = pBuilder.start();
LOG.info(new String(IOUtils.toByteArray(process.getInputStream())));
Run Code Online (Sandbox Code Playgroud)

如果它是一个运行很长时间并且偶尔提供输出的进程,那么最好将最后一行放在单独的线程中。