【问题标题】:Is there any way to send the stdout of a Process to SLF4J?有没有办法将进程的标准输出发送到 SLF4J?
【发布时间】:2016-07-17 00:01:01
【问题描述】:

我基本上是在做以下事情:

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

有没有办法将InputStream 写入记录器,以便由我的记录设置管理?还是我应该采取另一种方法来捕获流程输出?

更新:我重写了这个,因为我刚刚意识到我读错了Process/ProcessBuilder API 并且getInputStream() 是标准输出

更新 2 理想情况下,实现这一点的方式将允许我在 stdout/stderr 到来时处理它们(一次一行),而不是稍后处理。

【问题讨论】:

    标签: java slf4j


    【解决方案1】:

    这是我使用的类的已编辑 sn-p

    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;
          }
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      如果你愿意使用库,zt-exec 非常方便,可以将进程的stdout和stderr重定向到SLF4J。

      例如,将 stdout 重定向到 info 级别,将 stderr 重定向到调用类的 logger 的错误级别:

      new ProcessExecutor().command("java", "-version")
              .redirectOutput(Slf4jStream.ofCaller().asInfo())
              .redirectError(Slf4jStream.ofCaller().asError())
              .execute();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多