我使用log4j2,我想为我的所有消息添加一个前缀.此前缀传递给构造函数参数,它取决于类的实例.所以我们处于对象级别(不是类或线程).
例如,我有一个A实例化的类new A(152),所以当我log.error("message")在这个类上使用时,152:就是在消息之前编写的.因为new A(155),155:将显示.
谢谢你的帮助
使用MDC来实现这一目标
在你的构造函数中
 MDC.put("prefix", yourvalue);
并在您的XML中使用它在模式中这样
      %X{prefix}
基于比尔克拉尔斯的回答:
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);
    }
}
然后你在你的类中设置为实例变量
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");
    }
}
一种解决方案是包装类。
public class YourLogger
{
    private Logger log;
    public void error(int value, String msg)
    {
        log.error(String.valueOf(value) + ": " + msg);
    }
}