我使用 ProcessBuilder 启动一个进程,并希望将输出写入 log4j。我怎样才能做到这一点?
我知道我可以将进程的输出重定向到一个文件,然后读回该文件,但我希望有一些更简单的方法。
如果有更简单的解决方案,我想避免编写自己的 OutputStream 实现。我希望我不是第一个想要将 ProcessBuilder 的输出作为像
List<String>
或者其他容易处理的东西。
最佳答案
您可以使用 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())));
如果是长时间运行,偶尔提供输出的进程,那么最好把最后一行放在单独的线程中。
关于java - 将进程的输出写入 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628423/