【问题标题】:Logging the PID in log4j2 without using thread context在不使用线程上下文的情况下在 log4j2 中记录 PID
【发布时间】:2017-09-11 04:39:56
【问题描述】:

我需要在我的 log4js 日志中包含 PID。我看到许多使用线程上下文的示例。但是,需要在创建的每个单独线程上设置这些。我被限制不这样做。

我需要一个解决方案,它要么不使用线程上下文,要么可以在所有线程上下文上设置 PID,用于可以从任意类创建的任何线程。

【问题讨论】:

标签: java logging configuration log4j log4j2


【解决方案1】:

请在 Log4j2 issue tracker 上创建功能请求以使其成为内置功能。

现在,您可以创建自定义插件。请参阅下面的代码。这将允许您在pattern layout 中指定%pid(类似于消息的%m)。

import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;

@Plugin(name = "ProcessIdPatternConverter", category = "Converter")
@ConverterKeys({ "pid", "processId" })
public final class ProcessIdPatternConverter extends LogEventPatternConverter {
    private final String pid;

    private ProcessIdPatternConverter(String[] options) {
        super("Process ID", "pid");
        String temp = options.length > 0 ? options[0] : "???";
        try {
            // likely works on most platforms
            temp = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
        } catch (final Exception ex) {
            try {
                // try a Linux-specific way
                temp = new File("/proc/self").getCanonicalFile().getName();
            } catch (final IOException ignoredUseDefault) {}
        }
        pid = temp;
    }

    /**
     * Obtains an instance of ProcessIdPatternConverter.
     *
     * @param options users may specify a default like {@code %pid{NOPID} }
     * @return instance of ProcessIdPatternConverter.
     */
    public static ProcessIdPatternConverter newInstance(final String[] options) {
        return new ProcessIdPatternConverter(options);
    }

    @Override
    public void format(final LogEvent event, final StringBuilder toAppendTo) {
        toAppendTo.append(pid);
    }
}

有关 Log4j2 插件如何工作的更多详细信息,请参阅manual

让Log4j2识别你的插件的一种方法是在配置的packages属性中指定插件类的包名:

<Configuration status="trace" 
     packages="com.myorg.mypluginpackage">

(Trace 开启 Log4j2 内部调试以帮助进行故障排除。)

【讨论】:

  • 是的,但是您能否编辑答案以包含有关将新类的包添加到 log4j2.xml 配置的信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
相关资源
最近更新 更多