【Python】logging內建模組基本使用
logging模組是Python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級、日誌儲存路徑、日誌檔案回滾等。
print也可以輸入日誌,logging相對print來說更好控制輸出在哪個地方,怎麼輸出及控制訊息級別來過濾掉那些不需要的資訊。
一條日誌資訊對應的是一個事件的發生,而一個事件通常需要包括以下幾個內容:
事件發生時間
事件發生位置
事件的嚴重程度--日誌級別
事件內容
上面這些都是一條日誌記錄中可能包含的欄位資訊,當然還可以包括一些其他資訊,如程序ID、程序名稱、執行緒ID、執行緒名稱等。
日誌格式就是用來定義一條日誌記錄中包含那些欄位的,且日誌格式通常都是可以自定義的。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' #作者:cacho_37967865 #部落格:https://blog.csdn.net/sinat_37967865 #檔案:loggingModel.py #日期:2018-11-12 #備註:logging模組是Python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級、日誌儲存路徑、日誌檔案回滾等。 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' import logging from datetime import datetime import os logger = logging.getLogger() # 初始化一個logger # 預設生成的root logger的level是logging.WARNING,低於該級別的就不輸出了 # 級別排序:CRITICAL>ERROR>WARNING>INFO>DEBUG logger.setLevel(logging.DEBUG) # 總級別:所有資訊都輸出 # 將日誌儲存到指定目錄的檔案 file_name = datetime.now().strftime('%Y%m%d%H%M') # 用時間當成檔名稱,格式:201811111833(年月日時分) log_path = os.path.dirname(os.path.abspath('.')) + '/logs/' # 指定儲存的絕對路徑 log_name = log_path + file_name + '.log' # 生成檔案資訊 save_file = logging.FileHandler(log_name) # 在控制檯輸出日誌 output = logging.StreamHandler() output.setLevel(logging.INFO) # 設定輸出到控制檯的級別 # 日誌輸出格式設定 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s --> %(message)s') save_file.setFormatter(formatter) output.setFormatter(formatter) # 日誌處理 logger.addHandler(save_file) logger.addHandler(output) logger.debug("this is a logger debug message") logger.info("this is a logger info message") logger.warning("this is a logger warning message") logger.error("this is a logger error message") logger.critical("this is a logger critical message")
一、日誌級別:
預設生成的root logger的level是logging.WARNING,低於該級別的就不輸出了
級別排序:CRITICAL > ERROR > WARNING > INFO > DEBUG
debug : 列印全部的日誌,詳細的資訊,通常只出現在診斷問題上
info : 列印info,warning,error,critical級別的日誌,確認一切按預期執行
warning : 列印warning,error,critical級別的日誌,一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低”),這個軟體還能按預期工作
error : 列印error,critical級別的日誌,更嚴重的問題,軟體沒能執行一些功能
critical : 列印critical級別,一個嚴重的錯誤,這表明程式本身可能無法繼續執行
二、常用函式:
logging.getLogger() 初始化一個logger
Logger.setLevel() 設定總日誌級別
logger.addHandler() 日誌處理
logging.FileHandler() 日誌儲存到檔案
logging.StreamHandler() 日誌輸出到控制檯
logging.Formatter() 日誌格式
setFormatter() 設定日誌格式
setLevel() 設定具體日誌級別
三、format常用格式說明
%(asctime)s: 列印日誌的時間
%(name)s: 列印模組名稱
%(levelname)s: 列印日誌級別名稱
%(message)s: 列印日誌資訊
%(levelno)s: 列印日誌級別的數值
%(pathname)s: 列印當前執行程式的路徑,其實就是sys.argv[0]
%(filename)s: 列印當前執行程式名
%(funcName)s: 列印日誌的當前函式
%(lineno)d: 列印日誌的當前行號
%(thread)d: 列印執行緒ID
%(threadName)s: 列印執行緒名稱
%(process)d: 列印程序ID