Python根记录器隐藏派生记录器级别



为什么logging会忽略我为suds记录器配置的设置?

在我的Django应用程序中,我在settings.py:中设置了日志记录

logging.basicConfig(
    level = logging.DEBUG,
    format = " %(levelname)s  [%(asctime)s] %(filename)s: %(message)s",
    datefmt='%d-%b %H:%M:%S',
    )

我也在这个应用程序中使用泡沫,但不想看到泡沫中的大量消息,所以我添加了这个:

SUDS_LOGGING_LEVEL = logging.CRITICAL
logging.getLogger('suds.client').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.transport').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.xsd.schema').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.wsdl').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.resolver').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.xsd.query').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.xsd.basic').setLevel(SUDS_LOGGING_LEVEL)
logging.getLogger('suds.binding.marshaller').setLevel(SUDS_LOGGING_LEVEL)    

然而,我仍然看到suds调试消息。

如果我在suds调用之前放置了一个pdb断点,我会确认logging.getLogger('suds.client').level是50(logging.CRITICAL)。我走到泡沫线,看到了所有的日志。

如果我临时更改根记录器的级别,则日志记录将被抑制:

original_log_level = logging.getLogger().level
logging.getLogger().setLevel(logging.CRITICAL)
... do some suds stuff ...
logging.getLogger().setLevel(original_log_level)

这一切都表明suds忽略了suds日志记录级别。

为什么?

Django 1.2.7,Python 2.7,suds 0.4 GA

%(name)s添加到格式字符串中。这将确切地告诉你哪些泡沫记录器仍在记录——也许你没有得到所有的。(例如,suds/client.py中的代码会记录到名为"suds.client"的记录器,但也会记录到名称为"sud.metrics"的记录器。)

还可以尝试将"泡沫"记录器的级别设置为CRITICAL,看看这是否会减少日志输出。

最新更新