log4j2:包含PID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2:包含PID相关的知识,希望对你有一定的参考价值。
我正在使用log4j2,同时在不同的进程(即不同的JVM)中运行相同代码的多个实例。我希望所有进程都能记录到同一个文件,interleaved如何配置(通过log4j2.xml)输出PID,以便在日志中区分不同的进程?
答案
也许MDC可以帮助你。试试这个:
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>
输出:
2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing...
↑↑↑↑
That's the PID
你可能想看到:
- Layouts - PatternLayout
- Effective Logging in Java/JEE – Mapped Diagnostic Context
- How can a Java program get its own process ID?
- How to use MDC with thread pools?
另一答案
从版本2.9开始,log4j2-core中有一个插件ProcessIdPatternConverter就是这样做的。
只需在模式布局中设置%pid或%process Id就可以记录它。
log4j文档:https://logging.apache.org/log4j/2.x/manual/layouts.html
以上是关于log4j2:包含PID的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段