2012-02-01 19 views
0

私は別のプロセスを開始し、すべての標準出力と標準エラーをSLF4Jに記録しようとしているかなり単純なJavaコードを持っています。出力がプロセスから読み込みを停止します

私は私が見ているものよりもはるかに出力があることを確信しているものの残念ながら、私は、私はそれよりも多くの出力を見ることはない、私のプロセスからの出力の非常に最初の行を取得しています
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の出力をすべて取得するにはどうすればよいですか?

答えて

2

私は問題があなたがstderrから読んだことはないと思っています - もしプロセスがstderr用に持っているバッファをいっぱいにしても、stdoutに何も印刷していなければstdoutの読み込みをブロックします。

読み込みループの1つを別のスレッドで開始することをお勧めします.1つはstdoutから読み込み、もう1つはstderrから読み込みます。

関連する問題