Python根记录器隐藏后代记录器级别

时间:2012-03-19 21:54:37

标签: python django logging suds

为什么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,但是不想看到来自suds的大量消息,所以我添加了这个:

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 DEBUG消息。

如果我在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

1 个答案:

答案 0 :(得分:3)

%(name)s添加到格式字符串中。这将告诉你究竟哪些肥皂水记录器仍在记录 - 也许你没有得到所有这些。 (例如,suds / client.py中的代码记录到名为'suds.client'的记录器,但也记录到名为'suds.metrics'的记录器。)

还尝试将'suds'记录器的级别设置为CRITICAL,看看是否会减少记录输出。