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