Log4j在消息之前没有打印名称

时间:2012-11-13 17:13:42

标签: java logging log4j

我有一个log4j记录器,我实例化如下:

logger = Logger.getLogger("EQUIP(" + id + ")");

这样做,当我调用logger.info("message")时,我应该得到这样的输出(带有一些日期格式):

13/11/12 15:08:27 INFO: EQUIP(1): message

但我只是得到了:

13/11/12 15:08:27 INFO: message

我还将logger.getName()打印到控制台进行调试,它会返回正确的“EQUIP(1)”名称。在某些情况下,我的程序中会出现这种情况,我有几个这样的记录器,但主要是在这个特定的类中。我想知道我做错了什么,如果这个名字应该只是类/包名,或者它可以是什么(它在80%以上的记录器中运行良好)。我需要打印每个设备的ID,因为我有几个同时工作,并且在没有这个的情况下跟踪它们几乎是不可能的。

我应该如何解决这个问题,最好不要将资源更改为包含此前缀的所有日志调用?

1 个答案:

答案 0 :(得分:3)

输出格式取决于您为appender配置的模式。如果模式字符串包含%c,那么您将获得记录器名称,如果它没有,那么您就不会。

另一种方法可能是使用mapped diagnostic context,它旨在消除写入同一记录器的不同线程的日志输出之间的歧义。