12

在log4j PatternLayout ( log4j patternLayout )中使用这两个 log4j 转换字符时,我无法确定使用这两个字符之间的确切区别

  • 类别 (%c)
  • 等级 (%C)

有人可以给我一个例子,这两者会有所不同吗?

类别不总是与类名匹配吗?

问候,

4

1 回答 1

18

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

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

那么你会得到与 and 相同的结果%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]
于 2011-10-21T22:05:57.590 回答