優雅地記錄Python程序日誌2:模塊組件化日誌記錄器
文章首發個人博客:優雅地記錄Python程序日誌2:模塊組件化日誌記錄器 - 州的先生zmister.com
本篇將會涉及:
- logging的各個模塊化組件
- 構建一個組件化的日誌器
logging的模塊組件化
在上一篇文章中,我們介紹了Python的內置模塊logging的使用,通過短短的幾行代碼我們就實現了一個日誌記錄器。。
import loggingnnlogging.basicConfig(level=logging.INFO,filename=test.log,format="%(levelname)s:%(asctime)s:%(message)s")nlogging.error("出現了錯誤")nlogging.info("列印信息")nlogging.warning("警告信息")n
在上面的例子中我們直接使用了logging模塊提供的簡單日誌記錄器。除此之外,logging模塊還提供了模塊化的方法,通過日誌記錄器、日誌處理器、過濾器和格式處理器等組件來靈活的配置日誌器:
- 日誌記錄器Loggers提供程序調用日誌記錄的介面;
- 日誌處理器Handlers用於將日誌記錄器創建的日誌記錄發送到相應的目標上;
- 過濾器Filters提供了對日誌記錄進行更詳細的輸出;
- 格式器Formatters用於指定輸出的日誌記錄的最終格式;
在前面的例子中我們知道,一條日誌記錄是通過調用一個日誌記錄器(Logger類的實例)的方法來執行的。每一個日誌記錄器都有一個name來標識這個日誌記錄器,比如上一篇文章中我們創建的日誌記錄起的name就是默認的root。
日誌記錄器
通過logging的getLogger()方法,我們可以創建一個日誌記錄器,並指定其名稱:
log = logging.getLogger("test_logger")n
這樣我們就實例化了一個名為test_logger的日誌記錄器。這個日誌記錄器除了包含一些基本的功能,比如調用各級別的日誌方法外,還能夠添加日誌處理器、過濾器等。
日誌處理器
日誌處理器Handlers負責將相應的日誌記錄消息分發到指定的目標上。在logging模塊中,有很多種日誌處理器用於不同的用途,下面介紹幾個常用的:
- StreamHandler:用於將日誌消息發送到控制台;
- FileHandler:用於將日誌消息寫入文件中;
- SMTPHandler:用於將日誌消息發送到指定的電子郵箱;
- HTTPHandler:使用GET或POST方法將日誌消息發送給某個HTTP伺服器;
其中我們最常使用的,還是FileHandler處理器,將日誌消息寫入文件中。
使用logging.FileHandler()可以創建一個FileHandler處理器處理器:logHandler = logging.FileHandler(filename=log.log)n
我們在此創建了一個FileHandler處理器,並指定日誌的文件名為log.log。
在創建日誌處理器之後,可以通過日誌記錄器的addHandler()方法,將處理器添加到記錄器中。
log.addHandler(logHandler)n
日誌格式器
在上一篇文章中,我們通過logging.basicConfig()的format參數來指定輸出日誌消息的格式。而在模塊組件化中,我們使用logging.Formatter()方法來創建一個日誌格式器。
formats = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s: %(message)s,n datefmt=%Y/%m/%d %I:%M:%S %p)n
在創建之後,可以通過日誌處理器的setFormatter()方法,將日誌格式器添加到日誌處理器中:
logHandler.setFormatter(formats)n
這樣,我們就基本組裝好了一個模塊化的日誌器。接著就能夠在程序中調用日誌記錄器的方法來記錄日誌:
import loggingnndef mylog():n print(inspect.stack()[0])n # 創建一個日誌記錄器n log = logging.getLogger("test_logger")n log.setLevel(logging.DEBUG)nn # 創建一個日誌處理器n logHandler = logging.FileHandler(filename=log.log)n logHandler.setLevel(logging.DEBUG)nn # 創建一個日誌格式器n formats = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s: %(message)s,n datefmt=%Y/%m/%d %I:%M:%S %p)nn # 將日誌格式器添加到日誌處理器中n logHandler.setFormatter(formats)nn # 將日誌處理器添加到日誌記錄器中n log.addHandler(logHandler)n return lognn# 輸出日誌nlog = mylog()nlog.info("這是一個普通信息")nlog.debug("這是一個調試信息")nlog.warning("這是一個警告信息")nlog.error("這是一個錯誤信息")nlog.critical("這是一個危險信息")n
運行程序的結果如下:
下一篇,我們將介紹如何使用日誌配置文件來精簡日誌記錄器。
【把你的Python用起來 - 州的先生 http://zmister.com】
推薦閱讀:
※Mac上安裝xampp,無法獲取到htdocs目錄下的某些項目文件夾。
※成為碼魔的三條路
※C、C++語言學習資料
※好書一起讀(186):編程的一點心得
※計算機語言恐懼症怎麼辦? 或者說,一學習就困的病怎麼治?