首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为log4j消息添加前缀(在对象级别)

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

Stack Overflow用户
提问于 2013-05-24 04:10:47
回答 5查看 10K关注 0票数 8

我使用log4j2,我想在我的所有消息中添加一个前缀。这个前缀被传递给构造函数参数,它依赖于类的实例。因此,我们处于对象级别(而不是类或线程)。

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

谢谢你的帮忙

EN

回答 5

Stack Overflow用户

发布于 2013-05-24 04:18:10

使用MDC来实现这一点

在你的构造函数中放入

代码语言:javascript
代码运行次数:0
运行
复制
 MDC.put("prefix", yourvalue);

在您的XML中,就像这样在pattern中使用它

代码语言:javascript
代码运行次数:0
运行
复制
      %X{prefix}
票数 7
EN

Stack Overflow用户

发布于 2013-05-24 04:23:44

根据比尔·克拉尔的回答:

代码语言:javascript
代码运行次数:0
运行
复制
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);
    }
}

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

代码语言:javascript
代码运行次数:0
运行
复制
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");
    }
}
票数 5
EN

Stack Overflow用户

发布于 2014-08-26 02:13:16

这里有一个简单的变通办法:您可以使用方法对字符串进行包装,该方法向字符串添加前缀,并将连接后的字符串返回给error方法。

代码语言:javascript
代码运行次数:0
运行
复制
public class A {
    private static final Logger LOG = LogManager.getLogger();

    final int index;

    public A(int index) {
        this.index = index;
    }

    public static void f(String message) {
        return String.valueOf(index) + ": ";
    }

    public void method() {

        // ...

        LOG.error(f("message"));

    }

}

优势:

  • Simple
  • You可以在一个class/method
  • You中记录带前缀和不带前缀的消息不需要在log4j2 configuration

中永久添加像%X{prefix}这样的内容

缺点:

  • 如果要添加前缀

,则必须始终使用包装器方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16723016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档