我希望为主进程分叉的每个进程创建一个单独的日志文件。
在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之前,没有任何变化。
答案 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
,这将创建一个开始将所有日志从进程重定向到此文件。