2016-07-17 10 views
2

Ich mache im Wesentlichen die folgenden:Gibt es eine Möglichkeit, den Stand eines Prozesses an SLF4J zu senden?

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

Gibt es eine Möglichkeit, die InputStream an den Logger zu schreiben, so dass es durch meine Protokollierungseinstellungen verwaltet wird? Oder gibt es einen anderen Ansatz, den ich nehmen sollte, um die Prozessausgabe zu erfassen?

Update: Ich habe das geschrieben, weil ich mir die Process/ProcessBuilder API falsch gelesen hatte gerade realisiert und dass getInputStream() ist STDOUT

Update 2 Idealerweise wird die Art und Weise, dass diese mich erlauben würde erreicht werden würde zu verarbeiten beide stdout/stderr wie sie kommen (Zeile zu einer Zeit) und nicht einige Zeit später. Hier

Antwort

0

ist eine bearbeitete Ausschnitt aus der Klasse, die ich benutze

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

Verwandte Themen