优雅地记录Python程序日志2:模块组件化日志记录器
本文摘自:https://zhuanlan.zhihu.com/p/32043593
本篇將會涉及:
- logging的各個模塊化組件
- 構(gòu)建一個組件化的日志器
logging的模塊組件化
在上一篇文章中,我們介紹了Python的內(nèi)置模塊logging的使用,通過短短的幾行代碼我們就實現(xiàn)了一個日志記錄器。。
import logginglogging.basicConfig(level=logging.INFO,filename='test.log',format="%(levelname)s:%(asctime)s:%(message)s") logging.error("出現(xiàn)了錯誤") logging.info("打印信息") logging.warning("警告信息")在上面的例子中我們直接使用了logging模塊提供的簡單日志記錄器。除此之外,logging模塊還提供了模塊化的方法,通過日志記錄器、日志處理器、過濾器和格式處理器等組件來靈活的配置日志器:
- 日志記錄器Loggers提供程序調(diào)用日志記錄的接口;
- 日志處理器Handlers用于將日志記錄器創(chuàng)建的日志記錄發(fā)送到相應(yīng)的目標(biāo)上;
- 過濾器Filters提供了對日志記錄進行更詳細(xì)的輸出;
- 格式器Formatters用于指定輸出的日志記錄的最終格式;
在前面的例子中我們知道,一條日志記錄是通過調(diào)用一個日志記錄器(Logger類的實例)的方法來執(zhí)行的。每一個日志記錄器都有一個name來標(biāo)識這個日志記錄器,比如上一篇文章中我們創(chuàng)建的日志記錄起的name就是默認(rèn)的root。
?
日志記錄器
通過logging的getLogger()方法,我們可以創(chuàng)建一個日志記錄器,并指定其名稱:
log = logging.getLogger("test_logger")這樣我們就實例化了一個名為test_logger的日志記錄器。這個日志記錄器除了包含一些基本的功能,比如調(diào)用各級別的日志方法外,還能夠添加日志處理器、過濾器等。
日志處理器
日志處理器Handlers負(fù)責(zé)將相應(yīng)的日志記錄消息分發(fā)到指定的目標(biāo)上。在logging模塊中,有很多種日志處理器用于不同的用途,下面介紹幾個常用的:
- StreamHandler:用于將日志消息發(fā)送到控制臺;
- FileHandler:用于將日志消息寫入文件中;
- SMTPHandler:用于將日志消息發(fā)送到指定的電子郵箱;
- HTTPHandler:使用GET或POST方法將日志消息發(fā)送給某個HTTP服務(wù)器;
其中我們最常使用的,還是FileHandler處理器,將日志消息寫入文件中。
使用logging.FileHandler()可以創(chuàng)建一個FileHandler處理器處理器:
我們在此創(chuàng)建了一個FileHandler處理器,并指定日志的文件名為log.log。
在創(chuàng)建日志處理器之后,可以通過日志記錄器的addHandler()方法,將處理器添加到記錄器中。
log.addHandler(logHandler)日志格式器
在上一篇文章中,我們通過logging.basicConfig()的format參數(shù)來指定輸出日志消息的格式。而在模塊組件化中,我們使用logging.Formatter()方法來創(chuàng)建一個日志格式器。
formats = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s',datefmt='%Y/%m/%d %I:%M:%S %p')在創(chuàng)建之后,可以通過日志處理器的setFormatter()方法,將日志格式器添加到日志處理器中:
logHandler.setFormatter(formats)這樣,我們就基本組裝好了一個模塊化的日志器。接著就能夠在程序中調(diào)用日志記錄器的方法來記錄日志:
import loggingdef mylog():print(inspect.stack()[0])# 創(chuàng)建一個日志記錄器log = logging.getLogger("test_logger")log.setLevel(logging.DEBUG)# 創(chuàng)建一個日志處理器logHandler = logging.FileHandler(filename='log.log')logHandler.setLevel(logging.DEBUG)# 創(chuàng)建一個日志格式器formats = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s',datefmt='%Y/%m/%d %I:%M:%S %p')# 將日志格式器添加到日志處理器中l(wèi)ogHandler.setFormatter(formats)# 將日志處理器添加到日志記錄器中l(wèi)og.addHandler(logHandler)return log# 輸出日志 log = mylog() log.info("這是一個普通信息") log.debug("這是一個調(diào)試信息") log.warning("這是一個警告信息") log.error("這是一個錯誤信息") log.critical("這是一個危險信息")運行程序的結(jié)果如下:
轉(zhuǎn)載于:https://www.cnblogs.com/GavinSimons/p/9143386.html
總結(jié)
以上是生活随笔為你收集整理的优雅地记录Python程序日志2:模块组件化日志记录器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTPS配置全记录
- 下一篇: 第五人格结局故事悲伤(《第五人格》官方网