在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]