標籤:

優雅地記錄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用起來 - 州的先生 zmister.com


推薦閱讀:

Mac上安裝xampp,無法獲取到htdocs目錄下的某些項目文件夾。
成為碼魔的三條路
C、C++語言學習資料
好書一起讀(186):編程的一點心得
計算機語言恐懼症怎麼辦? 或者說,一學習就困的病怎麼治?

TAG:Python | 编程 |