先來一段程序告知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(很少使用)