本文介紹了有沒有辦法將進程的標(biāo)準(zhǔn)輸出發(fā)送到SLF4J?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我基本上是在做以下事情:
Process process = new ProcessBuilder().command( ... ).start();
InputStream stdout = process.getInputStream();
LoggerFactory.getLogger( this.class ).debug...?
有沒有辦法將InputStream
寫入記錄器,使其由我的日志記錄設(shè)置進行管理?或者,我是否應(yīng)該采用其他方法來捕獲流程輸出?
更新:我重寫了這個,因為我剛剛意識到我讀錯了Process/ProcessBuilder
API,getInputStream()
是STDOUT
更新2理想情況下,實現(xiàn)此目的的方式將允許我在stdout/stderr出現(xiàn)時(一次一行)處理它們,而不是稍后處理它們。
推薦答案
以下是我使用的類的編輯過的代碼片段
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 + ":";
logInputStream(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;
}
}
}
}
這篇關(guān)于有沒有辦法將進程的標(biāo)準(zhǔn)輸出發(fā)送到SLF4J?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,