8

プロセス出力とエラーストリームをログファイルに書き込むための良い例を得るために、しばらく探していました。プロセスを実行するためにapache-commonsexecライブラリを使用しています。それを実証するためのコードサンプルに従う

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

1 に答える 1

17

これを実現するためのコードは次のとおりです。

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-commonsexecを使用すると、(プログラマーの)コードとライフが非常に簡単になります。Runtime.execを使用してコマンドラインコマンドを実行する大量のコードを破棄することができました。

于 2011-03-31T11:28:44.647 に答える