如何在log4j中打印自定义前缀

时间:2014-09-09 05:18:27

标签: java log4j

默认情况下,log4j会将类名打印为log的前缀。现在我的情况是我在一个JVM中有多个A类实例,并且这个类中有一个日志。我希望下面的日志让我知道哪个实例正在打印这行日志?我怎样才能做到这一点?

2014-09-09 13:07:08,512 INFO com.myexample.A(id1)
2014-09-09 13:07:08,514 INFO com.myexample.A(id2)

2 个答案:

答案 0 :(得分:4)

我认为您无法通过log4j.properties文件中的设置来执行此操作。查看可能的变体here

但你可以解决这个问题:

class A {
    Logger LOGGER;

    A(String id) {
        LOGGER = Logger.getLogger(getClass() + "(" + id + ")");
    }

    void myMethod() {
        LOGGER.info("Hello!");
    }
}

答案 1 :(得分:0)

最简单的方法是在日志消息中添加所需的ID:

if (logger.isDebugEnabled()) {
  int id = this.hashCode(); // Invoke ID getter method
  logger.debug( String.format("[ %d ] My log message with ID", id) );
}