java - 使用 Pump StreamHandler 将输出和错误写入日志文件

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

我一直在寻找一个很好的例子来将进程输出和错误流写入日志文件。 我使用 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);
}

最佳答案

下面是实现这个的代码。

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 执行命令行命令的代码。

关于java - 使用 Pump StreamHandler 将输出和错误写入日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499042/

相关文章:

java - 计算文本文件中的字符数

java - 如何配置 Jenkins 使用 Maven 进行构建?

java - 将符号表示为字符串

java - 将 csv 文件读入数组

go - 你如何在 golang 中打印多行 exec 输出

java - 从 PHP 执行 Java JAR 将不起作用

编译器/语言运行时与中间件

javascript - node.js 并在运行时/期间生成模块

java - 错误 :Runtime() has private aaccess in java. lang.runtime

java - 在java中用不同的用户调用外部进程