2016-07-17 4 views
2

私は基本的に次のことをやっている:プロセスの標準出力をSLF4Jに送る方法はありますか?

Process process = new ProcessBuilder().command(...).start(); 
InputStream stdout = process.getInputStream(); 
LoggerFactory.getLogger(this.class).debug...? 

は、それが私のログの設定によって管理されますようにロガーにInputStreamを書き込むための方法はありますか?または、プロセス出力を取り込むために取るべき別のアプローチがありますか?

更新:私はちょうど私が間違っProcess/ProcessBuilder APIを読み、getInputStream()がSTDOUTは理想的には、これが達成されるだろうという方法は私が処理できるようになるアップデート2

であることを気づいたので、私はこれを書き換えましたstdout/stderrの両方が来ると(一度に一行)、しばらくしてからではありません。ここで

答えて

0

は私が

public class CommandLineLogger { 
    private static final Logger logger = LoggerFactory.getLogger(CommandLineLogger.class); 

    public void logStandardOutput(InputStream inputStream) { 
    display("stdout", inputStream);  
    } 

    private void display(String identifier, InputStream inputStream) { 
    logger.debug("Printing output from {}", identifier); 
    try { 
     String formattedIdentifier = identifier + ":"; 
     printLines(formattedIdentifier, inputStream); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    private void logInputStream(String outputType, InputStream inputStream) throws Exception { 
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
    BufferedReader bufferReader = new BufferedReader(inputStreamReader); 
    while (true) { 
     String line = bufferReader.readLine(); 
     if (line != null) { 
     logger.debug(outputType + ": " + line); 
     } else { 
     break; 
     } 
    } 
    } 
} 

link to entire class

を使用したクラスの編集したスニペットです
関連する問題