为每个分叉的java进程

时间:2016-08-29 14:34:35

标签: java log4j2 processbuilder

我希望为主进程分叉的每个进程创建一个单独的日志文件。

在log4j2.xml中,日志文件名声明为:

fileName="${sys:loggingFileName}.log"

在初级课程中,比如说A类,会创建一个日志:

public class A {
    System.setProperty ("loggingFileName", "MyLogA");
    log = LogManager.getLogger (A.class);
    ...
    log.info (...);
    ProcessBuilder pb = new ProcessBuilder ();
    Map<String, String> environment;
    environment = pb.environment ();
    environment.put ("CLASSPATH", System.getProperty ("java.class.path"));
    pb.command (Arrays.asList ("/usr/bin/java", "class B"));
    final Process process = pb.start ();
}

B类看起来与上面完全一样(用B代替A代替,用C代替新类的代替)。

当单独启动(而不是通过ProcessBuilder)时,A类和B类都按预期创建单独的日志。

但是,当使用ProcessBuilder从类A派生类B时,会创建一个包含指定日志条目的MyLogA.log文件,但不包含MyLogB.log。

我不明白为什么。任何指导都表示赞赏。

另外:我尝试过放置:

pb.redirectOutput (Redirect.INHERIT);
pb.redirectError (Redirect.INHERIT);

pb.redirectErrorStream (true);

在pb.start之前,没有任何变化。

1 个答案:

答案 0 :(得分:0)

在启动任何流程构建器之前,请使用以下代码行,以便将日志重定向到特定的日志文件。

Process p = null;

ProcessBuilder pb = new ProcessBuilder(......);

File logFile = new File("path to file/nameOfFile");

logFile.createNewFile();
            pb.redirectErrorStream(Boolean.TRUE).redirectOutput(Redirect.appendTo(logFile));

p = pb.start();

一旦调用pb.start,这将创建一个开始将所有日志从进程重定向到此文件。