1. 程式人生 > 實用技巧 >封裝nb_log類,應用在專案上使用更方便

封裝nb_log類,應用在專案上使用更方便

環境安裝

使用pip即可安裝使用

pip install nb_log

功能介紹

0)自動轉換print效果,再也不怕有人在專案中隨意print,導致很難找到是從哪裡冒出來的print。
只要import nb_log,專案所有地方的print自動現型並在控制檯可點選幾精確跳轉到print的地方。

1)相容性
使用的是python的內建logging封裝的,返回的logger物件的型別是py官方內建日誌的Logger型別,相容性強,
保證了第三方各種handlers擴充套件數量多和方便,和一鍵切換現有專案的日誌。

比如logru和logbook這種三方庫,完全重新寫的日誌,
它裡面主要被使用者使用的logger變數型別不是python內建Logger型別,

造成logger說擁有的屬性和方法有的不存在或者不一致,這樣的日誌和python內建的經典日誌相容性差,
只能相容(一鍵替換logger型別)一些簡單的debug info warning errror等方法,。

2) 日誌記錄到多個地方
內建了一鍵入參,每個引數是獨立開關,可以把日誌同時記錄到8個常用的地方的任意幾種組合,
包括 控制檯 檔案 釘釘 郵件 mongo kafka es 等等 。在第8章介紹實現這種效果的觀察者模式。

3) 日誌名稱空間獨立,採用了多例項logger,按日誌名稱空間區分。
名稱空間獨立意味著每個logger單獨的日誌界別過濾,單獨的控制要記錄到哪些地方。

logger_aa = LogManager('
aa').get_logger_and_add_handlers(10,log_filename='aa.log') logger_bb = LogManager('bb').get_logger_and_add_handlers(30,is_add_stream_handler=False,ding_talk_token='your_dingding_token') logger_cc = LogManager('cc').get_logger_and_add_handlers(10,log_filename='cc.log')

那麼logger_aa.debug('哈哈哈')
將會同時記錄到控制檯和檔案aa.log中,只要debug及debug以上級別都會記錄。

logger_bb.warning('嘿嘿嘿')
將只會傳送到釘釘群訊息,並且logger_bb的info debug級別日誌不會被記錄,
非常方便測試除錯然後穩定了調高界別到生產。

logger_cc的日誌會寫在cc.log中,和logger_aa的日誌是不同的檔案。

4) 對內建looging包打了猴子補丁,使日誌永遠不會使用同種handler重複記錄

使用nb_log,對同一名稱空間的日誌,可以無懼反覆新增同類型handler,不會重複記錄。

5)支援日誌自定義,執行此包後,會自動在你的python專案根目錄中生成nb_log_config.py檔案,按說明修改。

基本使用

1、pycham中調整設定控制檯日誌打印出的顏色

2、設定完成後去掉console彈出的顏色設定

3、自動顯示print且可跳轉

在nb_log_config.py (第一次執行列印日誌會在當前專案的根目錄下自動生成)中進行設定如下:

設定完成後自動跳轉:

4、實際操作中使用:

二次封裝:

實際暫時用不到那麼多功能,也不需要多例項logger,所以取裡面的一次,進行了封裝,就不用在Py檔案的裡面每次都例項下

log地址原日誌檔案是寫死的,允許被修改,預設日誌存放路徑,可以在原始碼裡檢視到。

一下封裝,可以再優化:

1、logger名稱可以作為引數傳進來

2、log_path和log_filename可以放在配置檔案裡讀取過來,放在nb_log_config.py裡也是可以

以下封裝只是個人覺得做自動化測試使用比較方便

還有很多別的功能可以檢視get_logger_and_add_handlers方法,或者nb_log的init檔案說明

 1 from nb_log import LogManager
 2 
 3 class NbLog:
 4 
 5     def __init__(self):
 6         self.logger=LogManager('simple').get_logger_and_add_handlers(log_path="log存放地址",log_filename="日誌名稱")
 7 
 8     def error(self,msg):
 9         return self.logger.error(msg)
10     def debug(self,msg):
11         return self.logger.debug(msg)
12     def info(self,msg):
13         return self.logger.info(msg)
14     def warning(self,msg):
15         return self.logger.warning(msg)
16     def exception(self,msg,exc_info=True):
17         return self.logger.exception(msg,exc_info)
18 
19 if __name__ == '__main__':
20     dolog =NbLog()
21     dolog.debug("這個是debug日誌")
22     dolog.error("這個是error日誌")

引用:https://www.cnblogs.com/123anqier-blog/p/13406702.html