一、logger與root
<logger>
用來設置某一個包或者具體的某一個類的日志打印級別、以及指定<appender>。<logger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。
name:用來指定受此logger約束的某一個包或者具體的某一個類。
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前logger將會繼承上級的級別。
addtivity:是否向上級logger傳遞打印信息。默認是true。
logger可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個logger。如果有多個<appender-ref>元素,日志都會打印到添加的<appender-ref>中
比如:
<logger name="monitor" level="${LEVEL}" additivity="false" >
<appender-ref ref="MONITOR" />
<appender-ref ref="ERROR" />
</logger>
logger.error("error",e);會將日志打印到<appender-ref ref="MONITOR" />和<appender-ref ref="ERROR" />中
<root>
也是<logger>元素,但是它是根logger。只有一個level屬性,應為已經被命名為"root".
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置為INHERITED或者同義詞NULL。
默認是DEBUG。
<root>可以包含零個或多個<appender-ref>元素,標識這個appender將會添加到這個logger。
logger的appender根據參數additivity決定是否要疊加root的appender,logger的級別是其自身定義的級別,和root的級別沒什么關系。
判斷一個類的日志輸出情況,首先找到這個類所在的logger(沒有特別定義則默認為root),然后根據以上規則判斷出這個logger的appender和level。然后既可以知道這個類的哪些日志會被輸出到哪些地方了。注意:任何一個類只會和一個logger對應,要么是定義的logger,要么是root,判斷的關鍵在於找到這個logger,然后判斷這個logger的appender和level
