python
  • django
  • logging
  • suds
  • 2012-03-19 60 views 1 likes 
    1

    为什么logging忽略我为suds记录器配置的设置?Python根记录器隐藏后代记录器级别

    在我的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)  
    

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

    如果我在泡沫调用之前放置一个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是忽略了泡沫日志记录级别。

    为什么?

    Django的1.2.7,Python 2.7版,0.4泡GA

    回答

    3

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

    另请尝试设置'suds'记录器的级别到CRITICAL,看看是否减少了日志输出。

    +1

    两者都有帮助。添加记录器的名称表明确实有其他记录器正在记录。 单独设置“泡沫”记录器的级别就有诀窍。 谢谢。 – 2012-03-20 02:44:38

    相关问题