我正在使用log4j2,并在同时运行多个相同代码的不同进程(即不同的JVM)。 我希望所有进程将日志记录到同一个文件中,并交错输出。如何通过log4j2.xml配置输出PID, 以便在日志中区分不同的进程?
我正在使用log4j2,并在同时运行多个相同代码的不同进程(即不同的JVM)。 我希望所有进程将日志记录到同一个文件中,并交错输出。如何通过log4j2.xml配置输出PID, 以便在日志中区分不同的进程?
自log4j2-core 2.9版本起,有一个插件ProcessIdPatternConverter可以实现此功能。
只需在模式布局中设置%pid或%processId即可记录日志。
log4j文档:https://logging.apache.org/log4j/2.x/manual/layouts.html
import java.lang.management.ManagementFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
public class TestPID {
private static final Logger LOG = LogManager.getLogger(TestPID.class);
static {
// Get the process id
String pid = ManagementFactory.getRuntimeMXBean().getName().replaceAll("@.*", "");
// MDC
ThreadContext.put("pid", pid);
}
public static void main(String[] args) {
LOG.info("Testing...");
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5X{pid} %-5p %c#%M - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
输出:
2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing...
↑↑↑↑
That's the PID
你可能想查看:
log4j.appender.consoleAppender.layout.ConversionPattern=%-25d %-5p ${PID} [%-10t] %c{3} - %m%n
2021-03-23 11:42:57.281 INFO 896 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/v1] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2021-03-23 11:43:02,766 INFO 896 [http-nio-8080-exec-4] springboot.controller.MyController - greeting(/v1)