2012-03-19 8 views
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)  

まだ私はまだ泡の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は、ログレベルを泡を無視していることを示唆しています。

なぜですか?

ジャンゴ1.2.7、Pythonの2.7、泡0.4 GA

答えて

3

は、書式文字列に%(name)sを加えます。そうすれば、ロガーがまだロギングしているロスを正確に知ることができます。 (たとえば、suds/client.pyのコードを 'suds.client'という名前のロガーに記録しますが、 'suds.metrics'という名前のロガーにもログを記録します)。

また、 'suds' CRITICALに設定し、ログ出力を削減するかどうかを確認します。

+1

どちらも助けになりました。ロガーの名前を追加すると、実際にロギングしていた他のロガーがあることがわかりました。 "suds"ロガーのレベルだけを設定することは、そのトリックでした。ありがとうございます。 ありがとうございます。 –

関連する問題