在寫代碼的時候,往往會漏掉日志這個關鍵因素,導致功能在使用的時候出錯卻無法溯源。
其實,只需要寫一個非常簡單的日志裝飾器,我們就能大大提升排查問題的效率。
1.簡陋版裝飾器
寫一個裝飾器非常簡單,因為本質上裝飾器就是一個返回函數的“高階”函數而已:
1) 函數作為參數傳遞進裝飾器。
2) 裝飾器內定義一個函數,處理作為參數傳遞進來的函數。
3) 返回這個裝飾器內定義的函數
用一下試試看:
效果如下:
雖然這樣可以實現我們所需要的功能,但其實有很大的優化空間。
2.普通版裝飾器
第一版代碼中有一個顯而易見的問題,裝飾器內定義的處理函數不支持kwargs,而在裝飾器中支持kwargs僅僅是舉手之勞而已。
第二個問題是,生成時間戳的時候采用字符串截取的形式,這種形式過于粗暴。其實可以使用strftime做字符串轉換。
修改如下:
似乎優化得差不多了,不過依然存在改進空間。
3.優化版裝飾器
在前兩版代碼中,我們使用print進行日志輸出,其實這種處理日志的方式并不標準。
使用logging模塊控制日志輸出是一個更好地選擇。
為了使用logging模塊記錄日志,我們需要先配置好logging相關的選項。
1) 首先,生成一個日志記錄器,并配置日志等級:
2) 配置日志格式、增加handler控制輸出流:
此處可以設置handler所需要處理的日志等級,沒有設置則默認使用logger自身的Level,即DEBUG等級。
3) 最后,將此handler加入到日志記錄器內:
logging 完整配置如下:
使用的時候非常簡單,就是把print換成logger.debug即可:
效果如下:
這樣,一個比較完善的日志裝飾器就完成了。
附常用的日志等級配置:
-
函數
+關注
關注
3文章
4327瀏覽量
62573 -
日志
+關注
關注
0文章
138瀏覽量
10639 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
評論