簡體   English   中英

多個模塊的 Python 日志記錄

[英]Python logging for multiple modules

我正在開發一個包含多個模塊的 python 項目。 我試圖用 log.conf 實現日志記錄,它已經按預期工作。 但是,我想知道,有沒有其他方法可以將記錄器添加到模塊中而不將記錄器鍵添加到 log.conf? 因為為我需要添加記錄器的每個模塊添加密鑰非常麻煩。

目前,我的 log.conf 看起來像這樣。

[loggers]
keys=root,main,xx_utils,xx_config,xx_extraction, ....

[handlers]
keys=consoleHandler,rotatingFileHandler

[formatters]
keys=defaultFormatters

[logger_root]
handlers=consoleHandler

[logger_main]
handlers=rotatingFileHandler
level=INFO
qualname=__main__
propagate=1

[xx_utils]
handlers=rotatingFileHandler
level=INFO
qualname=xx_utils
propagate=1
....

本質上,我想知道是否可以創建一個可由每個模塊導入的 loggerUtils 類,這樣我就不需要將 loggers 鍵添加到 log.conf。

作為過去幾天花了太多時間學習如何做到這一點的人,我想我終於到了,並會嘗試向您指出對我有幫助的地方。

當前日志維護者的這個答案解釋了如何很好地實現多個模塊: https : //stackoverflow.com/a/15735146/2574074

我發現這個答案也非常有幫助: https : //stackoverflow.com/a/4150322/2574074

對於您的具體問題,本質上,如果您的所有記錄器都具有相同的配置(正如它們所顯示的那樣),那么我認為對您來說最簡單的方法是在您的配置中建立和配置您的根記錄器,如下所示:

[loggers]
keys=root

[handlers]
keys=consoleHandler,rotatingFileHandler

[formatters]
keys=defaultFormatters

[logger_root]
level=DEBUG
handlers=consoleHandler,rotatingFileHandler

[handler_consoleHandler]
... your consoleHandler configuration ...

[handler_rotatingFileHandler]
... your rotatingFileHandler configuration ...

... 

但是,您實際上不會直接登錄到根記錄器。

相反,在每個模塊的頂部,添加以下內容:

import logging
logger = logging.getLogger(__name__)

或者您可以使用任何您想要的名稱:

import logging
logger = logging.getLogger(xx_utils)

這將為每個模塊建立一個新的記錄器(即,無需創建單獨的 loggerUtils 類)並且因為您沒有設置級別,所以默認情況下這些記錄器中的每一個都將具有 NOTSET 級別,因此這些記錄器的日志將被傳遞到父記錄器,最終到達根記錄器。

給我帶來麻煩的重要提示是確保您以與其他子模塊相同的方式為主模塊建立記錄器,但請務必在閱讀配置文件並建立/配置根記錄器。 否則,如果將 main.py 作為腳本運行,您將通過調用logger = logging.getLogger(main)logger = logging.getLogger(__name__)自動建立根記錄logger = logging.getLogger(main) ,但它不會具有您想要的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM