繁体   English   中英

为每个派生的Java进程创建一个单独的log4j2日志

[英]Create a separate log4j2 log for each forked java process

我想为由主进程派生的每个进程创建一个单独的日志文件。

在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之前,没有任何变化。

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

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这将创建一个开始,将所有日志从进程重定向到该文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM