python
  • django
  • logging
  • suds
  • 2012-03-19 59 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

    相關問題