1. 程式人生 > >【Python】logging內建模組基本使用

【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