在log4j PatternLayout ( log4j patternLayout )中使用这两个 log4j 转换字符时,我无法确定使用这两个字符之间的确切区别
- 类别 (%c)
- 等级 (%C)
有人可以给我一个例子,这两者会有所不同吗?
类别不总是与类名匹配吗?
问候,
在log4j PatternLayout ( log4j patternLayout )中使用这两个 log4j 转换字符时,我无法确定使用这两个字符之间的确切区别
有人可以给我一个例子,这两者会有所不同吗?
类别不总是与类名匹配吗?
问候,
如果您以文档建议的流行方式初始化记录器,并在类中使用它,那将是相同的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]