2014-01-14 14 views
9

ログを書き込むためにPythonでログを使用しようとしましたが、間違いなくerrorだけがログに記録されます。infoは設定したレベルに関係なく無視されます。Python Loggerが動作しません

コード:

import logging 
import logging.handlers 

if __name__ == "__main__": 
    logger = logging.getLogger() 
    fh = logging.handlers.RotatingFileHandler('./logtest.log', maxBytes=10240, backupCount=5) 
    fh.setLevel(logging.DEBUG)#no matter what level I set here 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    fh.setFormatter(formatter) 
    logger.addHandler(fh) 
    logger.info('INFO') 
    logger.error('ERROR') 

結果は:

2014-01-14 11:47:38,990 - root - ERROR - ERROR 

http://docs.python.org/2/library/logging.html#logging-levels

によればINFOがあまりにも記録されなければなりません。

答えて

15

問題は、ロガーのレベルがまだデフォルトに設定されていることです。したがって、ロガーはハンドラに到達する前にメッセージを破棄します。メッセージを受信した場合にハンドラがメッセージを受け入れたという事実は、それを受け取ることはないので問題ではありません。

ので、ちょうどこの追加:説明the docsとして

logger.setLevel(logging.INFO) 

を、ロガーのデフォルトのレベルは、それがWARNINGのデフォルトを持っているルート、ある親、でチェックを意味し、NOTSETです。

おそらく、ハンドラをデフォルトのNOTSETのままにしておくことができます。つまり、これはロガーのフィルタリングを中止します。

3

正しいしきい値を設定する必要があると思います。

logger.setLevel(logging.INFO) 
+1

スレッシュホールドはしきい値を設定しています...正しいものではありません。 – abarnert

+0

本当ですが、あなたの答えはより簡潔です。私は試した :-) –

関連する問題