我基本上做了以下事情:
Process process = new ProcessBuilder().command( ... ).start();
InputStream stdout = process.getInputStream();
LoggerFactory.getLogger( this.class ).debug...?
有没有办法将InputStream写入记录器,以便它由我的记录设置管理?或者我应该采取另一种方法来捕获过程输出?
更新:我已经重写了这个,因为我刚刚意识到我已经读错了Process / ProcessBuilder API而且getInputStream()是STDOUT
更新2理想情况下,实现这一目标的方式将允许我处理stdout / stderr(一次一行)而不是一段时间.
最佳答案 这是我使用的类的编辑片段
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;
}
}
}
}