使用Apache Commons Exec运行进程时,从控制台获取所有输出数据

时间:2011-09-16 19:53:25

标签: java multithreading logging apache-commons-exec

事情是......我正在使用DefaultExecutororg.apache.commons.exec库运行一个进程。像这样:

public class Main {

public static void main(String[] args) throws IOException, InterruptedException {

    CommandLine cmd = new CommandLine("java");
    DefaultExecutor exec = new DefaultExecutor();
    exec.setExitValue(1);
    exec.execute(cmd);
}

我需要使用另一个线程“在运行中”获取该输出,以将其记录到别处。实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

使用PipedOutputStreamPipedInputStream。你可以找到一个example here。不要忘记close your streams.

答案 1 :(得分:0)

你应该看看log4j,一个来自Apache的非常有用的项目。在我最近工作的项目中,log4j用于将来自各种线程的所有日志放入一个方便的文件中。只需确保构建记录器的方式只有一个实例可用,这可以解决您的问题。

不幸的是,我只是一名实习生,在团队设置日志系统时没有出现,所以我实际上无法帮助您进行配置。幸运的是,该项目的website似乎有很多文档可以帮助你。