【发布时间】:2012-02-01 06:14:19
【问题描述】:
我有一些非常简单的 Java 代码,我正在其中启动另一个进程并尝试将所有标准输出和标准错误记录到 SLF4J。
this.service.serverProcess = Runtime.getRuntime().exec(arguments);
this.service.serverIsRunning = true;
BufferedReader serverStdout = new BufferedReader(new InputStreamReader(
this.service.serverProcess.getInputStream()), 16);
BufferedReader serverStderr = new BufferedReader(new InputStreamReader(
this.service.serverProcess.getErrorStream()), 16);
String stdoutLine = null;
String stderrLine = null;
while ((stdoutLine = serverStdout.readLine()) != null ||
((stderrLine = serverStderr.readLine()) != null)) {
if (stdoutLine != null && stdoutLine.trim().length() > 0)
logger.info("{}", stdoutLine);
if (stderrLine != null && stderrLine.trim().length() > 0)
logger.error("{}", stderrLine);
}
try { this.service.serverProcess.waitFor(); } catch (InterruptedException e) {};
this.service.serverIsRunning = false;
不幸的是,我只从我的流程中获得了第一行输出,我从来没有看到比这更多的输出,尽管我确信输出比我看到的要多得多。
这里出了什么问题?我希望它在事件发生后立即记录,因为输出对我保留的日志很重要。如何获得我的流程的 STDOUT 和 STDERR 的完整输出?
【问题讨论】: