Log4j,patternLayout,类和类别

时间:2011-10-19 14:26:03

标签: configuration log4j pattern-layout

log4j PatternLayout log4j patternLayout

中使用这两个log4j转换字符时,我无法确定两者之间的确切区别
  • 类别(%c)
  • 类(%C)

有人可以举个例子说明这两个会不同吗?

类别是否始终与班级名称匹配?

此致

1 个答案:

答案 0 :(得分:18)

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

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

然后你会得到%c%C的相同内容,因为记录器名称(由“com.foo.X.class.getName()”构造)将匹配类名称发出了日志声明

将记录器称为“某事”

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]

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

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