我基本上是在做以下事情:
Process process = new ProcessBuilder().command( ... ).start();
InputStream stdout = process.getInputStream();
LoggerFactory.getLogger( this.class ).debug...?
Run Code Online (Sandbox Code Playgroud)
有没有办法将 写入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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |