通过log4j.xml配置logger时一般要指定<level value="${xxx_loggingLevel}" />,如果将这段漏掉了,log4j会设置一个null level。但需要注意的是这样不会有问题。
看Category的getEffectiveLevel()方法:
/**
Starting from this category, search the category hierarchy for a
non-null level and return it. Otherwise, return the level of the
root category.
The Category class is designed so that this method executes as
quickly as possible.
*/
public
Level getEffectiveLevel() {
for(Category c = this; c != null; c=c.parent) {
if(c.level != null)
return c.level;
}
return null; // If reached will cause an NullPointerException.
}
从当前Category开始,向上寻找第一个有效的Level。
最终会找到rootLogger的level,rootLogger的level不可能为空(setLeve时做了限制)
再看下Logmanager
Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
rootLogger的level初始为DEBUG级别。所以在这种情况下会以debug级别打日志。