【发布时间】:2022-02-04 11:56:52
【问题描述】:
编辑:我发现了问题,但我不完全确定它为什么会这样做。
问题在于LOGGING_CONFIG['handlers']['default']['level']。如果我删除该密钥,那么我将获得所需的功能,但我不知道为什么它没有被my_package.module.logger 记录器覆盖。对此的解释将不胜感激。
我正在尝试为我正在创建的包创建一个日志记录模块,但我并不真正了解 python logging 配置字典,因此,我无法解决我遇到的问题,其中级别logger 应该打印调试消息,但不是。我有以下结构:
my_package
|
|-----__init__.py
|-----module
| |
| |-----__init__.py
| |-----logger.py
| |-----run_me.py
logger.py 看起来像这样:
import logging
import logging.config
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level': 'INFO',
'formatter': 'standard',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout', # Default is stderr
},
},
'loggers': {
'': { # root logger
'handlers': ['default'],
'level': 'WARNING',
'propagate': False
},
'my_package.module.logger': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': False
},
'__main__': { # if __name__ == '__main__'
'handlers': ['default'],
'level': 'INFO',
'propagate': False
},
}
}
logging.config.dictConfig(LOGGING_CONFIG)
log = logging.getLogger(__name__)
log.warning('Configured for Warnings')
log.debug('Configured for Debug')
log.info('Configured for Info')
这里是run_me.py
import my_package.module.logger
如果我直接运行logger.py,我会得到预期的输出
> TIME [WARNING] __main__: Configured for Warnings
> TIME [INFO] __main__: Configured for Info
但如果我运行 run_me.py,我似乎没有得到预期的输出 - 缺少调试级别信息:
> TIME [WARNING] my_package.module.logger: Configured for Warnings
> TIME [INFO] my_package.module.logger: Configured for Info
如果我将LOGGING_CONFIG 中的记录器名称从my_package.module.logger 更改为my_package.module,问题仍然存在,我认为应该捕获模块目录中的任何内容。
如果我从配置字典中删除 __main__ 记录器,我也会在直接运行 logger.py 时得到预期的行为 - 它只显示警告输出。
为什么调试级别没有出现,尽管它已明确设置?
【问题讨论】: