python——Logging工作流程

logging模塊使用過程

  1. 第一次導入logging模塊或使用reload函數重新導入logging模塊,logging模塊中的代碼將被執行,這個過程中將產生logging日誌系統的默認配置。
  2. 自定義配置(可選)。logging標準模塊支持三種配置方式: dictConfig,fileConfig,listen。其中,dictConfig是通過一個字典進行配置Logger,Handler,Filter,Formatter;fileConfig則是通過一個文件進行配置;而listen則監聽一個網絡端口,通過接收網絡數據來進行配置。當然,除了以上集體化配置外,也可以直接調用Logger,Handler等對象中的方法在代碼中來顯式配置。
  3. 使用logging模塊的全局作用域中的getLogger函數來得到一個Logger對象實例(其參數即是一個字符串,表示Logger對象實例的名字,即通過該名字來得到相應的Logger對象實例)。
  4. 使用Logger對象中的debug,info,error,warn,critical等方法記錄日誌信息。

    logging模塊處理流程

logging_flow.png

  1. 判斷日誌的等級是否大於Logger對象的等級,如果大於,則往下執行,否則,流程結束。
  2. 產生日誌。第一步,判斷是否有異常,如果有,則添加異常信息。第二步,處理日誌記錄方法(如debug,info等)中的佔位符,即一般的字符串格式化處理。
  3. 使用註冊到Logger對象中的Filters進行過濾。如果有多個過濾器,則依次過濾;只要有一個過濾器返回假,則過濾結束,且該日誌信息將丟棄,不再處理,而處理流程也至此結束。否則,處理流程往下執行。
  4. 在當前Logger對象中查找Handlers,如果找不到任何Handler,則往上到該Logger對象的父Logger中查找;如果找到一個或多個Handler,則依次用Handler來處理日誌信息。但在每個Handler處理日誌信息過程中,會首先判斷日誌信息的等級是否大於該Handler的等級,如果大於,則往下執行(由Logger對象進入Handler對象中),否則,處理流程結束。
  5. 執行Handler對象中的filter方法,該方法會依次執行註冊到該Handler對象中的Filter。如果有一個Filter判斷該日誌信息爲假,則此後的所有Filter都不再執行,而直接將該日誌信息丟棄,處理流程結束。
  6. 使用Formatter類格式化最終的輸出結果。 注:Formatter同上述第2步的字符串格式化不同,它會添加額外的信息,比如日誌產生的時間,產生日誌的源代碼所在的源文件的路徑等等。
  7. 真正地輸出日誌信息(到網絡,文件,終端,郵件等)。至於輸出到哪個目的地,由Handler的種類來決定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章