在寫代碼的時(shí)候,往往會(huì)漏掉日志這個(gè)關(guān)鍵因素,導(dǎo)致功能在使用的時(shí)候出錯(cuò)卻無法溯源。
其實(shí),只需要寫一個(gè)非常簡(jiǎn)單的日志裝飾器,我們就能大大提升排查問題的效率。
1.簡(jiǎn)陋版裝飾器
寫一個(gè)裝飾器非常簡(jiǎn)單,因?yàn)楸举|(zhì)上裝飾器就是一個(gè)返回函數(shù)的“高階”函數(shù)而已:
1) 函數(shù)作為參數(shù)傳遞進(jìn)裝飾器。
2) 裝飾器內(nèi)定義一個(gè)函數(shù),處理作為參數(shù)傳遞進(jìn)來的函數(shù)。
3) 返回這個(gè)裝飾器內(nèi)定義的函數(shù)

用一下試試看:

效果如下:

雖然這樣可以實(shí)現(xiàn)我們所需要的功能,但其實(shí)有很大的優(yōu)化空間。
2.普通版裝飾器
第一版代碼中有一個(gè)顯而易見的問題,裝飾器內(nèi)定義的處理函數(shù)不支持kwargs,而在裝飾器中支持kwargs僅僅是舉手之勞而已。
第二個(gè)問題是,生成時(shí)間戳的時(shí)候采用字符串截取的形式,這種形式過于粗暴。其實(shí)可以使用strftime做字符串轉(zhuǎn)換。
修改如下:

似乎優(yōu)化得差不多了,不過依然存在改進(jìn)空間。
3.優(yōu)化版裝飾器
在前兩版代碼中,我們使用print進(jìn)行日志輸出,其實(shí)這種處理日志的方式并不標(biāo)準(zhǔn)。
使用logging模塊控制日志輸出是一個(gè)更好地選擇。
為了使用logging模塊記錄日志,我們需要先配置好logging相關(guān)的選項(xiàng)。
1) 首先,生成一個(gè)日志記錄器,并配置日志等級(jí):

2) 配置日志格式、增加handler控制輸出流:

此處可以設(shè)置handler所需要處理的日志等級(jí),沒有設(shè)置則默認(rèn)使用logger自身的Level,即DEBUG等級(jí)。
3) 最后,將此handler加入到日志記錄器內(nèi):

logging 完整配置如下:

使用的時(shí)候非常簡(jiǎn)單,就是把print換成logger.debug即可:

效果如下:

這樣,一個(gè)比較完善的日志裝飾器就完成了。
附常用的日志等級(jí)配置:

-
函數(shù)
+關(guān)注
關(guān)注
3文章
4402瀏覽量
66548 -
日志
+關(guān)注
關(guān)注
0文章
145瀏覽量
11016 -
python
+關(guān)注
關(guān)注
56文章
4849瀏覽量
89231
發(fā)布評(píng)論請(qǐng)先 登錄
理解Python裝飾器及其工作原理
分享python 7個(gè)好用的裝飾器
自制簡(jiǎn)單的星星花環(huán)
一文讀懂Python裝飾器
Python的函數(shù)裝飾器使用方法
Python:裝飾器的原理和案例
Python更優(yōu)雅的日志記錄解決方案Loguru
在Python中裝飾器的使用
Python自制簡(jiǎn)單實(shí)用的日志裝飾器
如何通過阿里云日志服務(wù)搭建一套通過Python上傳日志的監(jiān)控服務(wù)
如何寫一個(gè)簡(jiǎn)單的裝飾器
【每天學(xué)點(diǎn)AI】一個(gè)例子帶你了解Python裝飾器到底在干嘛!

Python 自制簡(jiǎn)單實(shí)用的日志裝飾器
評(píng)論