Python日志记录在2.5和2.6之间不兼容

Szi*_*ter 6 python logging incompatibility

你能帮我解决Python 2.5和2.6之间的以下不兼容问题吗?

logger.conf:

[loggers]
keys=root,aLogger,bLogger

[handlers]
keys=consoleHandler

[formatters]
keys=

[logger_root]
level=NOTSET
handlers=consoleHandler

[logger_aLogger]
level=DEBUG
handlers=consoleHandler
propagate=0
qualname=a

[logger_bLogger]
level=INFO
handlers=consoleHandler
propagate=0
qualname=b

[handler_consoleHandler]
class=StreamHandler
args=(sys.stderr,)
Run Code Online (Sandbox Code Playgroud)

module_one.py:

import logging
import logging.config

logging.config.fileConfig('logger.conf')
a_log = logging.getLogger('a.submod')
b_log = logging.getLogger('b.submod')

def function_one():
    b_log.info("function_one() called.")
Run Code Online (Sandbox Code Playgroud)

module_two.py:

import logging
import logging.config

logging.config.fileConfig('logger.conf')
a_log = logging.getLogger('a.submod')
b_log = logging.getLogger('b.submod')

def function_two():
    a_log.info("function_two() called.")
Run Code Online (Sandbox Code Playgroud)

logger.py:

from module_one import function_one
from module_two import function_two

function_one()
function_two()
Run Code Online (Sandbox Code Playgroud)

在Ubuntu 9.04下调用logger.py的输出:

$ python2.5 logger.py
$

$ python2.6 logger.py
function_one() called.
function_two() called.
$
Run Code Online (Sandbox Code Playgroud)

Vin*_*jip 8

这是一个修复在2.5和2.6之间的错误.fileConfig()函数用于一次性配置,因此不应多次调用 - 但是您选择安排它.fileConfig的预期行为是禁用配置中未明确提及的任何记录器,并保留启用提到的记录器及其子项; 这个错误导致孩子们不应该被禁用.示例记录器配置提到记录器'a'和'b'; 在调用getLogger('a.submod')之后,会创建一个子记录器.第二个fileConfig调用在Python 2.5中错误地禁用了它 - 在Python 2.6中,记录器未被禁用,因为它是配置中明确提到的记录器的子代.