Python學習:logging模塊

關於日誌

日誌是對軟件執行時所發生的事情的一種追蹤的方式。

軟件開發人員對於他們的代碼添加日誌記錄調用,藉此來指示某個事件的發生。

事件通過包含變量數據的描述信息來描述的。

軟件開發人員還會區分不同事件的重要性,即將不同的事件區分爲不同的等級、或者嚴重程度。

事件嚴重等級劃分

日誌所追蹤的事件的嚴重程度劃分,以及各個等級所對應的適用程度如下:

級別 何時使用
debug 事件的細節信息,當診斷問題時使用
info 確認程序按照預期運行
warning 表示有已知,或者即將發生的意外,但是程序還可以按照預期運行
error 由於嚴重的問題。程序的某些功能已經不能正常執行
critical 嚴重的錯誤,使得程序無法繼續執行

模塊定義的基本類

在logging模塊,定義了幾個基本的類,以實現日誌的全部功能,各個基本的類定義如下:

  1. Logger、暴露了應用程序代碼可直接使用的日誌api接口;
  2. Handler、將Logger創建的日誌記錄發送到恰當的目標地點;
  3. Filter、提供更精細的設施,用於確定要輸出的日誌記錄;
  4. Formatter、指定最終輸出的日誌記錄的格式。

每個想使用日誌功能的模塊或者應用,使用一個Logger實例將日誌信息添加到日誌中。Logger將創建LogRecord實例用來將日誌事件信息保存在內存中。Logger可以有多個Handler實例用來接收與處理日誌記錄,而Handler實例將使用Formatter實例將日誌記錄轉換爲輸出信息格式。

記錄日誌到文件

大多數應用需配置日誌記錄到文件,範例如下:

import logging

logging.basicConfig(filename='test.out', level=logging.DEBUG)
logging.debug('this message should go to the log file')

with open('test.out', 'rt') as f:
    body = f.read()
    
print(body)

在發生異常時,需記錄異常的日誌事件,直接使用無參數的debug、info、warning、error、或者critical函數並不能記錄異常信息,需要設置exc_info參數爲True,或者使用exception方法。範例如下:

import logging

logging.basicConfig(filename="test.log", filemode="w", 
                    format="%(asctime)s %(name)s:%(levelname)s:%(message)s", 
                    datefmt="%d-%M-%Y %H:%M:%S", 
                    level=logging.DEBUG)
a = 5
b = 0
try:
    c = a / b
except Exception as e:
    #下面三種方式三選一,推薦使用第一種
    logging.exception("Exception occurred")
    logging.error("Exception occurred", exc_info=True)
    logging.log(level=logging.DEBUG, msg="Exception occurred", exc_info=True)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章