python日誌記錄

1. 等級

日誌等級(level) 描述
DEBUG 最詳細的日誌信息,典型應用場景是 問題診斷
INFO 信息詳細程度僅次於DEBUG,通常只記錄關鍵節點信息,用於確認一切都是按照我們預期的那樣進行工作
WARNING 當某些不期望的事情發生時記錄的信息(如,磁盤可用空間較低),但是此時應用程序還是正常運行的
ERROR 由於一個更嚴重的問題導致某些功能不能正常運行時記錄的信息
CRITICAL 當發生嚴重錯誤,導致應用程序不能繼續運行時記錄的信息
  • 日誌等級是從上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日誌的信息量是依次減少的
  • 當指定日誌級別後,應用程序會記錄所有日誌級別大於或等於指定日誌級別的日誌信息

2. 記錄格式

  • 事件發生時間
  • 事件發生位置
  • 事件的嚴重程度--日誌級別
  • 事件內容

3. logging模塊

常用logging模塊用以記錄日誌

函數 說明
logging.debug(msg, *args, **kwargs) 創建一條嚴重級別爲DEBUG的日誌記錄
logging.info(msg, *args, **kwargs) 創建一條嚴重級別爲INFO的日誌記錄
logging.warning(msg, *args, **kwargs) 創建一條嚴重級別爲WARNING的日誌記錄
logging.error(msg, *args, **kwargs) 創建一條嚴重級別爲ERROR的日誌記錄
logging.critical(msg, *args, **kwargs) 創建一條嚴重級別爲CRITICAL的日誌記錄
logging.log(level, *args, **kwargs) 創建一條嚴重級別爲level的日誌記錄
logging.basicConfig(**kwargs) 對root logger進行一次性配置

I. logging.basicConfig()函數說明

該方法用於爲logging日誌系統做一些基本配置

logging.basicConfig(**kwargs)

  • logging.basicConfig()函數是一個一次性的簡單配置工具使,也就是說只有在第一次調用該函數時會起作用,後續再次調用該函數時完全不會產生任何操作的。
參數名稱 描述
filename 指定日誌輸出目標文件的文件名,指定該設置項後日志信心就不會被輸出到控制檯了
filemode 指定日誌文件的打開模式,默認爲'a'。需要注意的是,該選項要在filename指定時纔有效
format 指定日誌格式字符串,即指定日誌輸出時所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會列出。
datefmt 指定日期/時間格式。需要注意的是,該選項要在format中包含時間字段%(asctime)s時纔有效
level 指定日誌器的日誌級別
stream 指定日誌輸出目標stream,如sys.stdout、sys.stderr以及網絡stream。需要說明的是,stream和filename不能同時提供,否則會引發 ValueError異常
style Python 3.2中新添加的配置項。指定format格式字符串的風格,可取值爲'%'、'{'和'$',默認爲'%'
handlers Python 3.3中新添加的配置項。該選項如果被指定,它應該是一個創建了多個Handler的可迭代對象,這些handler將會被添加到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現2個或3個,否則會引發ValueError異常。

II. logging模塊定義的格式字符串字段

字段/屬性名稱 使用格式 描述
asctime %(asctime)s 日誌事件發生的時間--人類可讀時間,如:2003-07-08 16:49:45,896
created %(created)f 日誌事件發生的時間--時間戳,就是當時調用time.time()函數返回的值
relativeCreated %(relativeCreated)d 日誌事件發生的時間相對於logging模塊加載時間的相對毫秒數(目前還不知道幹嘛用的)
msecs %(msecs)d 日誌事件發生事件的毫秒部分
levelname %(levelname)s 該日誌記錄的文字形式的日誌級別('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno %(levelno)s 該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50)
name %(name)s 所使用的日誌器名稱,默認是'root',因爲默認使用的是 rootLogger
message %(message)s 日誌記錄的文本內容,通過 msg % args計算得到的
pathname %(pathname)s 調用日誌記錄函數的源碼文件的全路徑
filename %(filename)s pathname的文件名部分,包含文件後綴
module %(module)s filename的名稱部分,不包含後綴
lineno %(lineno)d 調用日誌記錄函數的源代碼所在的行號
funcName %(funcName)s 調用日誌記錄函數的函數名
process %(process)d 進程ID
processName %(processName)s 進程名稱,Python 3.1新增
thread %(thread)d 線程ID
threadName %(thread)s 線程名稱

4. 使用示例

    def __init__(self, filename):
        self.filename = filename
        self.log_filename = 'logs/' + self.filename
        logging.basicConfig(filename=self.log_filename + '.txt', filemode='a+',
                            level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s "
                            , datefmt="%m/%d/%Y %H:%M:%S %p")
        logging.info("FILENAME:%s " % self.filename)
        logging.info("*********************************************")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章