2016-11-02 10 views
0

私は、ファイルログ持っている:私は、次のコードを実行すると、それはdubugメッセージを印刷しない、そして、なぜ `DEBUG`レベルの出力に何も出力されないのですか?

[loggers] 
keys=root 

[handlers] 
keys=consoleHandler 

[formatters] 
keys=simpleFormatter 

[logger_root] 
level=INFO 
handlers=consoleHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=simpleFormatter 
args=(sys.stdout,) 

[formatter_simpleFormatter] 
format=%(asctime)s %(levelname)s %(message)s 
datefmt=%Y-%m-%d %H:%M:%S 

を。何故ですか?

from logging import getLogger 
from logging.config import fileConfig 
fileConfig('/Users/zech/Dropbox/git/micronota/micronota/log.cfg') 
l = getLogger() 
l.setLevel('DEBUG') 
l.debug('adfa') 
l.info('info') # this works and outputs 'info' 
+1

'setLevel'は数値レベルを期待しているからです(https://docs.python.org/2/library/logging.html#logging-levels)あなたは: 'l.setLevel(logging.DEBUG)'? (ファイルの先頭に 'logging'をインポートする必要があります) – BorrajaX

+0

python 3.5では、数値か文字列のどちらかで設定することができます。 – RNA

答えて

2

ああをして、私はそれを得ました!

また、ハンドラのレベルを設定する必要があります。

設定ファイルにStreamHandlerのレベルはINFOです。つまり、ルートロガーll.debug('adfa')メッセージを送信しようとしても、ハンドラ自体はそれを登録しません。これは、ログに記録するメッセージを細かく制御できるようにするためのものです。たとえば、端末に書き込むハンドラとファイルに書き込むハンドラという2つのハンドラが必要な場合を考えてみましょう。ターミナルでは、すべてを出力することはOKかもしれませんが、ファイルが大きくなりすぎるのではないかと心配するかもしれませんね。したがって、レベルがWARNに設定されたFileHandlerを作成すると、コードにl.debug(...)文を置くことができます。これは、コンソールには表示されますが、ファイルには表示されません。 Python 3.1(ビット古いためにドキュメントから

l = getLogger() 
l.setLevel('DEBUG') 
for handler in l.handlers: 
    handler.setLevel('DEBUG') 
l.debug('adfa') 

を、それはペーストは以下の削除された私はつもりだ文のようになります。あなたがしたいあなたの設定ファイルを変更しない場合

、あなたはこれを行うことができます

なぜ2つのsetLevel()メソッドがありますか?ロガーで設定されたレベルによって、ハンドラーに渡すメッセージの重大度が決まります。各ハンドラで設定されたレベルによって、ハンドラが送信するメッセージが決まります。

0

ログレベルをINFOに設定しました。あなたが交換することができます。

[logger_root] 
level=INFO 
handlers=consoleHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=simpleFormatter 
args=(sys.stdout,) 

[logger_root] 
level=DEBUG 
handlers=consoleHandler 

[handler_consoleHandler] 
class=StreamHandler 
level=DEBUG 
formatter=simpleFormatter 
args=(sys.stdout,) 
+0

ありがとうございます。注意:私は 'fileConfig'呼び出しの後にレベルを設定します。あなたは設定ファイルを読んだ後にレベルを変更できませんか? – RNA

+0

私は参照してください。 l.setLevel( 'DEBUG') 'の前後にどのレベルが設定されているかを示すためにl.getEffectiveLevel()を出力できますか? –

関連する問題