封裝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型別)一些簡單的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