先來一段程式告知python怎樣配置日誌。
logging.basicConfig(level=logging.DEBUG) # 設定日誌級別
# 建立日誌記錄器,指明日誌儲存的路徑、每個日誌檔案的最大大小、儲存的日誌檔案個數上限
file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)
# 建立日誌記錄的格式 日誌等級 輸入日誌資訊的檔名 行數 日誌資訊
formatter = logging.Formatter(`%(levelname)s %(filename)s:%(lineno)d %(message)s`)
# 為剛建立的日誌記錄器設定日誌記錄格式
file_log_handler.setFormatter(formatter)
# 為全域性的日誌工具物件(flask app使用的)新增日誌記錄器
logging.getLogger().addHandler(file_log_handler)
分析程式碼:
basicConfig():對日誌系統進行一次性配置,以下是可以指定的關鍵字引數
filename:指定日誌輸出目標檔案的檔名,指定該設定項後日志信心就不會被輸出到控制檯了
filemode:指定日誌檔案的開啟模式,預設為`a`。需要注意的是,該選項要在filename指定時才有效
format:指定日誌格式字串,即指定日誌輸出時所包含的欄位資訊以及它們的順序。logging模組定義的格式欄位下面會列出。
datefmt:指定日期/時間格式。需要注意的是,該選項要在format中包含時間欄位%(asctime)s時才有效
level:指定日誌器的日誌級別
stream:指定日誌輸出目標stream,如sys.stdout、sys.stderr以及網路stream。需要說明的是,stream和filename不能同時提供,否則會引發 ValueError異常
handlers:Python 3.3中新新增的配置項。該選項如果被指定,它應該是一個建立了多個Handler的可迭代物件,這些handler將會被新增到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現2個或3個,否則會引發ValueError異常。
RotatingFileHandler():輪轉檔案處理器,將日誌訊息傳送到磁碟檔案,並支援日誌檔案按大小切割
FileHandler():將日誌訊息傳送到磁碟檔案,預設情況下檔案大小會無限增長
StreamHandler():將日誌訊息傳送到輸出到Stream,如std.out, std.err或任何file-like物件。
Formatter():格式器,決定日誌記錄的最終輸出格式
%(levelname)s:日誌記錄的級別
%(message)s:日誌記錄的內容
%(asctime)s:日誌記錄的時間
%(pathname)s:呼叫日誌記錄檔案的全路徑
%(filename)s:pathname的檔名部分
%(module)s:pathname的檔名,不包含字尾
%(funcName)s:呼叫日誌記錄檔案的函式名
getLogger():建立一個Logger物件
addHandler():新增一個處理器
日誌級別
以下是由低到高,預設設定等級後不顯示低等級的訊息
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL(很少使用)