2011-08-10 7 views
33

私が書いているpythonスクリプトでは、ログモジュールを使ってイベントをログに記録しようとしています。私はlogging.debug("Some string")を実行しようとするとthis page in the docslogging.debugはルートロガーの出力にメッセージを持っている必要があることを述べているにもかかわらず、私は、コンソールへの出力を取得していない、Pythonログに何も出力されない

ERROR_FORMAT = "%(levelname)s at %(asctime)s in %(funcName)s in %(filename) at line %(lineno)d: %(message)s" 
DEBUG_FORMAT = "%(lineno)d in %(filename)s at %(asctime)s: %(message)s" 
LOG_CONFIG = {'version':1, 
       'formatters':{'error':{'format':ERROR_FORMAT}, 
          'debug':{'format':DEBUG_FORMAT}}, 
       'handlers':{'console':{'class':'logging.StreamHandler', 
            'formatter':'debug', 
            'level':logging.DEBUG}, 
          'file':{'class':'logging.FileHandler', 
            'filename':'/usr/local/logs/DatabaseUpdate.log', 
            'formatter':'error', 
            'level':logging.ERROR}}, 
       'root':{'handlers':('console', 'file')}} 
logging.config.dictConfig(LOG_CONFIG) 

:私は私のロガーを設定するには、次のコードを持っています。私のプログラムが何も出力しないのはなぜですか、どうすれば修正できますか?

答えて

54

デフォルトのログレベルは警告です。 レベルを変更していないので、ルート・ロガーのレベルは引き続き警告されます。 これは、デバッグログを含む警告より低いレベルのログを無視することを意味します。

これはtutorialで説明されています

import logging 
logging.warning('Watch out!') # will print a message to the console 
logging.info('I told you so') # will not print anything 

レベルは情報よりも高くなっているので、「情報」の行は、何も印刷されません。

だけでルートロガーでそれを設定し、レベルを変更するには:それはレベル= DEBUGとのハンドラを定義するために十分ではない、言い換えれば

'root':{'handlers':('console', 'file'), 'level':'DEBUG'} 

、実際のログレベルはまた、順にDEBUGでなければなりませんそれが何かを出力するようにする。

+0

ドキュメントには、デフォルトレベルはNOTSETで、すべてを出力する0のレベルです...なぜこれは真実ではありませんか? – Ben

+0

@Benそれはどこですか?私が見ることができるのは、「デフォルトレベルはWARNINGです。つまり、ログパッケージが別の方法で設定されていない限り、このレベル以上のイベントしか追跡されません」。 –

+0

https://docs.python.org/3.6/library/logging.html#logging.Logger.setLevel – Ben

関連する問題