У меня есть довольно простой 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 моего процесса?