2016-07-24 1 views
0

logging.debugからの出力が最も単純な状況で出力されません。 (私はlogger.warnからの出力を得るか。)最も単純なシナリオでPythonログメッセージが期待どおりに出力されない

import logging 
logger = logging.getLogger() 
logger.setLevel(logging.DEBUG) 
logger.warn('Logger is warning') 
logger.debug('Logger is debugging') 
print(logger.getEffectiveLevel(), 
     logger.isEnabledFor(logging.DEBUG), 
     file=sys.stderr) 

最後の行がlogging.DEBUGとして示してロガーのログレベルを、印刷し、ロガーが真であるそのレベル、有効になっているかどうか。出力はlog.warnでは表示されますが、log.debugでは表示されません。私は何が欠けていますか?

[Pythonの3.5、OS X 10.11]

+0

あなたのハンドラは何ですか? – fodma1

答えて

0

理由は、あなたがハンドラを指定していないということです。 Python 3.5では、ハンドラが指定されていないときに"handler of last resort"が使用されますが、その内部ハンドラのレベルはWARNINGであり、重大度の低いメッセージは表示されません。

logger.addHandler(logging.StreamHandler()) 

直前またはちょうどあなたのスニペットでsetLevel文の後のいずれか:あなたはハンドラを指定して、この例のように、それを追加する必要があります。

+0

うん、それはうまくいった。ありがとう。しかし、ロギングモデル[https://docs.python.org/3/howto/logging.html#logging-basic-tutorial]のドキュメントで基本的なチュートリアルを読んでみると、デフォルトのロガーのレベルをデフォルトのハンドラであり、ハンドラを追加する必要はありません。 [1]:https://docs.python.org/3/howto/logging.html#logging-basic-tutorial –

関連する問題