背景
在一個新的專案裡面加入了日誌功能,想自己寫一個,但是一個偶然的機會,透過google發現Python內建了一個非常強大的日誌(log)模組:logging。粗略的研究了一下,以下是我的一些心得札記。
為什麼使用日誌
追踪程序的一些運行信息,以達到時刻了解程序運行的狀況,快速捕獲程序的異常,及時發現程序錯誤的目的
logging模組簡介
從Python2.3起,Python的標準庫加入了logging模組.logging模組給運行中的應用提供了一個標準的信息輸出接口.典型的logging機制實現是把要輸出的數據簡單地寫到一個txt文件中去.寫log文件的方式是一種常見的打log的方式,而logging模組提供的更多,它可以把輸出信息輸出到所有類文件的對像中去,甚至TCP和UDP的sockets,email伺服器,Unix的syslog系統,NT系列的事件log系統,記憶體的buffer和HTTP伺服器,當然還有」真正的」檔案中去.
引入logging模組:
import logging #import logging module #使用logging模块: class CLog: #---------------------------------------------------------------------------- def __init__(self): self.logger = logging.getLogger() fileHandler = logging.FileHandler(LOG_FILE_PATH) formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') fileHandler.setFormatter(formatHandler) self.logger.addHandler(fileHandler) self.logger.setLevel(logging.NOTSET) #---------------------------------------------------------------------------- def DebugMessage(self,msg): self.logger.debug(msg) pass oCLog = CLog()
上面定義了一個簡單的log模組,我想用這一段簡單的程式碼來描述一下logging模組
logger
獲取log的一個實例,這個部分程式碼分離做得很好,可以透過增加不同的handler來豐富log實例的特性
FileHandler
指定了Log的輸出端是文件,透過傳入檔案路勁來指定輸出文件,我們可以為Log定義其他的輸出端例如StreamHandler,以及其他各種複雜的輸出方式,檔案是可能是最常用的方式,其他方式有待慢慢探索
FormatHandler
FomartHandler指定了FileHandler的輸出格式,例如我使用了以下的格式:('%(asctime)s %(levelname)s: %(message)s'),則輸出的文字格式為:
2013-07 -25 08:20:01,525 INFO: goodbye [127.0.0.1]:60442
有關format的關鍵字,例如asctime,levelname,可參考LogRecord attributes 官方文檔
的優先權
LevelWhen it's used
DEBUGDetailed information, typically of interest only when diagnosing problems.
INFOConfirmation that things are working as expected或 indicative of some problem in the near future ( e.g. 'disk space low'). The software is still working as expected.
ERRORDue to a more serious problem, the software has not been able to perform some function.💜
利 片to continue running.優先關係:DEBUG 可以根據self.logger.debug(msg),self.logger.info(msg),等函數來決定輸出資訊的等函數來決定輸出資訊的等函數來決定輸出資訊的等函數來決定輸出資訊的優先權SetLevelSetLevel函數定義了Log實例對處理log資訊的優先權,如果定義的優先權為info,則所有debug的資訊都會忽略,不輸出到輸出端,只輸入設定優先權以及設定優先順序以上的資訊