I'm using log4j2, and running multiple instances of the same code in different processes (ie different JVMs) at the same time. I'd like all processes to log to the same file, interleaved How can I configure (via log4j2.xml) to output the PID, so that the different processes can be distinguished in the logs?
Perhaps MDC can help you. Try this:
Java :
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>
Output :
2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing...
↑↑↑↑
That's the PID
You may want to see:
There is a plugin ProcessIdPatternConverter in log4j2-core since version 2.9 that does exactly this.
just setting %pid or %processId in the pattern layout logs it.
log4j documentation: https://logging.apache.org/log4j/2.x/manual/layouts.html
If you are using spring framework, you just need to append " ${PID}" inside pattern value, that's it. No need to add a new function to fetch your processId as mentioned in other answers.
log4j.appender.consoleAppender.layout.ConversionPattern=%-25d %-5p ${PID} [%-10t] %c{3} - %m%n
resulted in
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)
With log4j 1.2.17
${PID} throws the error
log4j:ERROR Unexpected char [ ] at position 55 in conversion patterrn.
The solutions are NOT tested well.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.