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

你可能想看到:

另一答案

从版本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,又叫超级进程(代码片段

为啥这个代码片段说包含错误?

Wordpress - 将代码片段包含到布局的选定部分的插件

带有路由附加程序的 Log4J2 不归档文件

在代码片段中包含类型转换

如何使用 viewpager 和片段为我的 ListView 设置适配器