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

2022-09-07 23:15:28 字數 3038 閱讀 3288

使用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

logmanager23

class

nblog:45

def__init__

(self,logger_name):

6 self.logger=logmanager(logger_name).get_logger_and_add_handlers(log_path="

log存放位址

",log_filename="

日誌名稱")

7def

get_log(self):

8return

self.logger910

11if

__name__ == '

__main__':

12 dolog =nblog("

test

").get_log()

13 dolog.debug("

這個是debug日誌")

14 dolog.error("

這個是error日誌")

15 dolog.exception("

這個是error日誌

")

引用:

sizeof應用在結構上的情況

請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現什麼結果呢?sizeof mystruct 為多少呢?也許你會這樣求 sizeof mystruct sizeof double sizeof char sizeof int 13 但是當在vc中測試上面結構...

電腦應用 在mac上使用aria2

chrome瀏覽器,aria2gui,chrome裡baiduexporter外掛程式。chrome chrome只需要aria2gui v1.4.1.zip 和 baiduexporter.crx firefox只需要aria2gui v1.4.1.zip 和 baiduexporter mast...

應用在k8s上執行的幾種網路模式

應用部署在k8s上,首先想到的是應用k8s的預設service模式配置。應用通過service向集群內部 clusterip 和集群外部 nodeport 暴露服務。k8s中的其他應用通過kube dns提供的dns解析功能,訪問servicename port即可訪問service後面的pod的服...