2016-08-21 7 views
2

設定レベルに準拠していない:私は明示的に設定しているので、Pythonのロガーは、私がのpython3対話プロンプトでロガーを作成し

>>> import logging 
>>> logger = logging.getLogger('foo') 
>>> logger.setLevel(logging.INFO) 
>>> logger.warn('bar') 
bar 
>>> logger.info('bar') 
>>> 

が、私はこのケースでは、出力barからlogger.infoを期待ログレベル。しかし、ここではそうではありません。どうして?

+1

使用しているPythonのバージョンを指定するか、明確あなたがしてください両方のバージョンについて尋ねる。 – buhtz

答えて

1

実際には、ログを設定していないため、実際にはどちらも出力されません。あなたはlogging.basicConfig()を実行したり、任意の出力を期待するのは、あなたのロガーにハンドラを追加する必要があります:

In [1]: import logging 

In [2]: logger = logging.getLogger('foo') 

In [3]: logger.setLevel(logging.INFO) 

In [4]: logger.warn('foo') 
No handlers could be found for logger "foo" 

In [5]: logger.info('foo') 

In [6]: logging.basicConfig() 

In [7]: logger.info('foo') 
INFO:foo:foo 

In [8]: logger.warn('foo') 
WARNING:foo:foo 

コメントでlarsksで述べたように、Pythonの3にロギングがあなたを意味レベルWARNING(」でデフォルトで設定されていますwarning()またはそれ以上のレベルをデフォルトで使用すると出力されます)。あなたのケースでは、あなたのいずれかは、上記の例のようにすべてのロガーにデフォルトのハンドラを追加したり、ロガーにハンドラを追加するlogging.basicConfig()を呼び出すことができます。

logger.addHandler(logging.StreamHandler()) 
+3

あなたの最初の文はPython 2でのみ正しいです。Python 3では 'basicConfig'を呼び出さなくても' WARNING'以上のログメッセージの出力をコンソールに表示します。 – larsks

+1

私は 'logger.addHandler(logging.StreamHandler())'も動作すると信じています。 (または、あなたが望むことを行うカスタムハンドラを追加することができます) – smarx

+0

確かに、答えは – sirfz

関連する問題