[英]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.