Python如何給函式庫增加日誌功能
阿新 • • 發佈:2020-08-05
問題
你想給某個函式庫增加日誌功能,但是又不能影響到那些不使用日誌功能的程式。
解決方案
對於想要執行日誌操作的函式庫而已,你應該建立一個專屬的 logger 物件,並且像下面這樣初始化配置:
# somelib.py import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) # Example function (for testing) def func(): log.critical('A Critical Error!') log.debug('A debug message')
使用這個配置,預設情況下不會列印日誌。例如:
>>> import somelib >>> somelib.func() >>>
不過,如果配置過日誌系統,那麼日誌訊息列印就開始生效,例如:
>>> import logging >>> logging.basicConfig() >>> somelib.func() CRITICAL:somelib:A Critical Error! >>>
討論
通常來講,你不應該在函式庫程式碼中自己配置日誌系統,或者是已經假定有個已經存在的日誌配置了。
呼叫 getLogger(__name__)
建立一個和呼叫模組同名的logger模組。 由於模組都是唯一的,因此建立的logger也將是唯一的。
log.addHandler(logging.NullHandler())
操作將一個空處理器繫結到剛剛已經建立好的logger物件上。 一個空處理器預設會忽略呼叫所有的日誌訊息。 因此,如果使用該函式庫的時候還沒有配置日誌,那麼將不會有訊息或警告出現。
還有一點就是對於各個函式庫的日誌配置可以是相互獨立的,不影響其他庫的日誌配置。 例如,對於如下的程式碼:
>>> import logging >>> logging.basicConfig(level=logging.ERROR) >>> import somelib >>> somelib.func() CRITICAL:somelib:A Critical Error! >>> # Change the logging level for 'somelib' only >>> logging.getLogger('somelib').level=logging.DEBUG >>> somelib.func() CRITICAL:somelib:A Critical Error! DEBUG:somelib:A debug message >>>
在這裡,根日誌被配置成僅僅輸出ERROR或更高級別的訊息。 不過 ,somelib
的日誌級別被單獨配置成可以輸出debug級別的訊息,它的優先順序比全域性配置高。 像這樣更改單獨模組的日誌配置對於除錯來講是很方便的, 因為你無需去更改任何的全域性日誌配置——只需要修改你想要更多輸出的模組的日誌等級。
Logging HOWTO 詳細介紹瞭如何配置日誌模組和其他有用技巧,可以參閱下。
以上就是Python如何給函式庫增加日誌功能的詳細內容,更多關於Python給函式庫增加日誌功能的資料請關注我們其它相關文章!