【问题标题】:Writing Output & Error to Log files using PumpStreamHandler使用 Pump StreamHandler 将输出和错误写入日志文件
【发布时间】:2011-07-26 19:45:22
【问题描述】:

我一直在寻找一个很好的例子来将进程输出和错误流写入日志文件。 我使用 apache-commons exec 库来执行我的进程。以下是一个代码示例来证明这一点

public static int executeCommand(CommandLine command, Logger log) throws ExecuteException, IOException {
    DefaultExecutor executor = new DefaultExecutor();
    executor.setExitValue(0);

    PumpStreamHandler psh = new PumpStreamHandler();
    executor.setStreamHandler(psh);

    return executor.execute(command);
}

【问题讨论】:

    标签: java runtime exec apache-commons apache-commons-exec


    【解决方案1】:

    以下是实现此目的的代码。

    class ExecLogHandler extends LogOutputStream {
        private Logger log;
    
        public ExecLogHandler(Logger log, Level logLevel) {
            super(logLevel.toInt());
            this.log = log;
        }
    
        @Override
        protected void processLine(String line, int logLevel) {
            log.log(Level.toLevel(logLevel), line);
        }
    }
    

    这就是我们如何使用上面的类。

    public static int executeCommand(CommandLine command, Logger log) throws ExecuteException, IOException {
        DefaultExecutor executor = new DefaultExecutor();
        executor.setExitValue(0);
    
        PumpStreamHandler psh = new PumpStreamHandler(new ExecLogHandler(log, Level.DEBUG), new ExecLogHandler(log, Level.ERROR));
        executor.setStreamHandler(psh);
    
        return executor.execute(command);
    }
    

    像这样使用 apache-commons exec 使(程序员的)代码和生活变得如此简单。我能够丢弃大量使用 Runtime.exec 执行命令行命令的代码。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2013-08-29
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多