为什么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,看看这是否会减少日志输出。