有没有办法将进程的标准输出发送到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出现时(一次一行)处理它们,而不是稍后处理它们。
解决方案
以下是我使用的类的编辑过的代码片段
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;
}
}
}
}
相关文章