第一步: Get the filter chain
觸發過濾器,如果過濾器返回FilterReply.DENY,拋棄logging request;返回FilterReply.NEUTRAL,繼續執行下一個過濾器;返回FilterReply.ACCEPT,忽略之後的過濾器,進入下一步。
第二步: Apply the basic selection rule
比較logging request的level與Logger對象的level。 Request level < logger level,則logging request被丟棄。
第三步: Create a LoggingEvent Object
創建LoggingEvent對象,這個步驟類似於前端觸發事件流程,它的作用與前端Event對象的作用是相同的,封裝請求的信息。
第四步: Invoking Appender
觸發Logger中Appender對象的doAppender方法,方法的參數爲LoggingEvent。
第五步: Formatting the output
Appender對象依賴Layout對象,此時觸發Appender中的Layout對象的doLayout方法,參數爲LoggingEvent。它會將LoggingEvent對象轉換爲字符串。
第六步: Sending out the LoggingEvent
將返回的字符串寫入到各個終端。