通過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級別打日誌。