Log4j、patternLayout、类和类别



log4j PatternLayout (log4j PatternLayout)

中使用时,我很难确定使用这两个log4j转换字符之间的确切差异
  • 类别(% c)
  • 类(% C)

谁能给我一个例子,这两个会有什么不同?

类别不总是匹配类名吗?

认为,

如果您以文档中建议的流行方式初始化日志记录器,并在X类中使用它,则将是相同的:

Logger logger = Logger.getLogger(com.foo.X.class);

那么您将获得%c%C相同的结果,因为记录器名称(由"com.foo.X.class.getName()"构造)将与发出日志语句的类名称匹配。。

将记录器命名为"something"

Logger logger = Logger.getLogger("something");

,您将有%c的"东西"和%C的类名。

请注意,%C是由log4j从当前线程的堆栈跟踪中计算出来的,因此它具有很大的性能影响,不像%c,它只是一个字符串。你可以做一个有趣的实验来验证它:

package com.foo;
class A {
     private Logger = Logger.getLogger(B.class);
     // ...
     logger.log("inside A class");
}

模式[%c][%m]的输出假设B在包com.foo中,将是:

[com.foo.B][inside A class]

无论B的位置如何,模式[%C][%m]的输出将是:

[com.foo.A][inside A class]

最新更新