如何为log4j消息添加前缀(在对象级别)

Luc*_*cie 8 java log4j log4j2

我使用log4j2,我想为我的所有消息添加一个前缀.此前缀传递给构造函数参数,它取决于类的实例.所以我们处于对象级别(不是类或线程).

例如,我有一个A实例化的类new A(152),所以当我log.error("message")在这个类上使用时,152:就是在消息之前编写的.因为new A(155),155:将显示.

谢谢你的帮助

Nul*_*ion 6

使用MDC来实现这一目标

在你的构造函数中

 MDC.put("prefix", yourvalue);
Run Code Online (Sandbox Code Playgroud)

并在您的XML中使用它在模式中这样

      %X{prefix}
Run Code Online (Sandbox Code Playgroud)


Dai*_*Lea 5

基于比尔克拉尔斯的回答:

public class LogWrapper
{
    private Logger log;
    private String prefix;

    public LogWrapper(Logger log, String prefix) {
        this.log = log;
        this.prefix = prefix;
    }

    public void error(String msg)
    {
        log.error(prefix + ": " + msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你在你的类中设置为实例变量

public class MyClass {
    private LogWrapper log;

    public MyClass(int prefix) {
        log = new LogWrapper(Logger.getLogger(this.getClass()), String.valueOf(prefix));

        // then log away
        log.error("Test");
    }
}
Run Code Online (Sandbox Code Playgroud)


Bil*_*lar 0

一种解决方案是包装类。

public class YourLogger
{
    private Logger log;

    public void error(int value, String msg)
    {
        log.error(String.valueOf(value) + ": " + msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我尝试这样做,但调用类和线路号丢失了。 (2认同)