[英]Python logging - config file in multiple modules with root logger
當我在配置文件中配置根記錄器時。 其他子記錄器不遵循相同的配置。
main.py
import logging
import logging.config
import test
logging.config.fileConfig("logger.ini")
logger = logging.root
logger.critical("main")
test.f()
test.py
import logging
logger = logging.getLogger(__name__)
def f():
print "inside f"
logger.critical("Test")
print logger.parent.name
print logger.parent.handlers
logger.ini
[loggers]
keys=root
[handlers]
keys=console
[formatters]
keys=form
[logger_root]
level=DEBUG
handlers=console
[handler_console]
class=StreamHandler
formatter=form
args=()
[formatter_form]
format=%(levelname)s:%(name)s:%(message)s
當我運行程序時,我沒有
CRITICAL:root:main
inside f
root
[<logging.StreamHandler object at 0x00000000021C4908>]
但是我沒有其他文件的日志。 我認為如果孩子沒有任何處理程序,他會將日志發送給他的父母。 知道為什么我看不到日志嗎? 或如何解決?
這里發生的是,在記錄器獲取test.py
在打電話之前創建logging.config.fileConfig("logger.ini")
在main.py
。 調用fileConfig
,將刪除未在配置文件中指定的所有現有記錄器。
我可以通過兩種方法建議解決此問題:
不要在模塊的全局范圍內調用logging.getLogger
,僅在需要在函數/方法內部使用logger時才調用
更改代碼,以便在調用fileConfig()
時指定: logging.config.fileConfig("logger.ini", disable_existing_loggers=False)
。 這將導致維護並且不禁用在應用配置之前創建的所有記錄器。
有關選項#2的詳細信息,請參見https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.