繁体   English   中英

当 dictConfig 设置级别时,日志记录不显示调试级别

[英]Logging not displaying debug level when level is set by dictConfig

编辑:我发现了这个问题,但我不完全确定它为什么会这样做。

问题在于LOGGING_CONFIG['handlers']['default']['level'] 如果我删除该密钥,那么我将获得所需的功能,但我不知道为什么它没有被my_package.module.logger记录器覆盖。 对此的解释将不胜感激。


我正在尝试为我正在创建的 package 创建一个日志记录模块,但我不太了解 python logging配置字典,因此,我无法解决我遇到的问题,记录器的级别应该打印调试消息,但不是。 我有以下结构:

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 ,我会得到预期的 output

> TIME [WARNING] __main__: Configured for Warnings
> TIME [INFO] __main__: Configured for Info

但是如果我运行run_me.py ,我似乎没有得到预期的 output - 缺少调试级别信息:

> TIME [WARNING] my_package.module.logger: Configured for Warnings
> TIME [INFO] my_package.module.logger: Configured for Info

如果我将 LOGGING_CONFIG 中的记录器名称从LOGGING_CONFIG my_package.module.loggermy_package.module ,问题仍然存在,我认为它应该捕获模块目录中的任何内容。

如果我从配置字典中删除__main__记录器,我也会在直接运行logger.py时得到预期的行为 - 它只显示警告 output。

为什么调试级别没有出现,尽管它被明确设置?

处理程序的级别设置为 INFO,它不会打印任何 DEBUG 消息。

'handlers': {
    'default': {
        'level': 'INFO', <-------- here

我不熟悉您使用的格式,我使用的是以下格式,它总是对我有用:

logging.basicConfig(
     filename = 'c:\\logs\\XXXX.log',
     level = logging.DEBUG,
     format = '[XXX] %(levelname)-7.7s %(message)s'# )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM