logging模塊使用過程
- 第一次導入logging模塊或使用reload函數重新導入logging模塊,logging模塊中的代碼將被執行,這個過程中將產生logging日誌系統的默認配置。
- 自定義配置(可選)。logging標準模塊支持三種配置方式: dictConfig,fileConfig,listen。其中,dictConfig是通過一個字典進行配置Logger,Handler,Filter,Formatter;fileConfig則是通過一個文件進行配置;而listen則監聽一個網絡端口,通過接收網絡數據來進行配置。當然,除了以上集體化配置外,也可以直接調用Logger,Handler等對象中的方法在代碼中來顯式配置。
- 使用logging模塊的全局作用域中的getLogger函數來得到一個Logger對象實例(其參數即是一個字符串,表示Logger對象實例的名字,即通過該名字來得到相應的Logger對象實例)。
- 使用Logger對象中的debug,info,error,warn,critical等方法記錄日誌信息。
logging模塊處理流程
logging_flow.png
- 判斷日誌的等級是否大於Logger對象的等級,如果大於,則往下執行,否則,流程結束。
- 產生日誌。第一步,判斷是否有異常,如果有,則添加異常信息。第二步,處理日誌記錄方法(如debug,info等)中的佔位符,即一般的字符串格式化處理。
- 使用註冊到Logger對象中的Filters進行過濾。如果有多個過濾器,則依次過濾;只要有一個過濾器返回假,則過濾結束,且該日誌信息將丟棄,不再處理,而處理流程也至此結束。否則,處理流程往下執行。
- 在當前Logger對象中查找Handlers,如果找不到任何Handler,則往上到該Logger對象的父Logger中查找;如果找到一個或多個Handler,則依次用Handler來處理日誌信息。但在每個Handler處理日誌信息過程中,會首先判斷日誌信息的等級是否大於該Handler的等級,如果大於,則往下執行(由Logger對象進入Handler對象中),否則,處理流程結束。
- 執行Handler對象中的filter方法,該方法會依次執行註冊到該Handler對象中的Filter。如果有一個Filter判斷該日誌信息爲假,則此後的所有Filter都不再執行,而直接將該日誌信息丟棄,處理流程結束。
- 使用Formatter類格式化最終的輸出結果。 注:Formatter同上述第2步的字符串格式化不同,它會添加額外的信息,比如日誌產生的時間,產生日誌的源代碼所在的源文件的路徑等等。
- 真正地輸出日誌信息(到網絡,文件,終端,郵件等)。至於輸出到哪個目的地,由Handler的種類來決定。