簡體   English   中英

Python日志記錄-具有root記錄器的多個模塊中的配置文件

[英]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 ,將刪除未在配置文件中指定的所有現有記錄器。

我可以通過兩種方法建議解決此問題:

  1. 不要在模塊的全局范圍內調用logging.getLogger ,僅在需要在函數/方法內部使用logger時才調用

  2. 更改代碼,以便在調用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.

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