2017-12-15 3 views
0

私は次のスニペットで起こっている状況を再現しようとしています。ここでは、いくつかの情報を記録しようとする2つの異なるロガーがあります。 それぞれは、コンソールへのロギング情報を印刷するように構成されています。コードの問題は、メッセージの前にロガーの名前を印刷していないことです。ここで何が問題になったのですか?なぜロガーはthier自身の名前をログに記録されていませんか?

import logging 
import sys 

ch = logging.StreamHandler(sys.stdout) 
ch.setLevel(logging.DEBUG) 

logger1 = logging.getLogger("logger1") 
logger1.setLevel(logging.DEBUG) 
logger1.addHandler(ch) 

logger2 = logging.getLogger("logger2") 
logger2.setLevel(logging.DEBUG) 
logger2.addHandler(ch) 

logger1.debug('log statement') 
logger2.debug('log statement') 

私は取得しています出力は、私が期待してい何、

log statement 
log statement 

であるあなたは、あなたのStreamHandlerのにフォーマッタを追加することもでき

logger1: log statement 
logger2: log statement 
+0

あなたは正しくロギングを設定していません。基本的な設定は 'logging.basicConfig()'関数の助けを借りて行うことができます:https://docs.python.org/3/library/logging.html#logging.basicConfig –

+0

@KlausD。はい、OPはロギングが「正しく」設定されています。そうしないと、出力が全くなくなり、ハンドラを持たないロガーについてのメッセージが表示されます。 –

答えて

5

です:

import logging 
import sys 

ch = logging.StreamHandler(sys.stdout) 
ch.setLevel(logging.DEBUG) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 

logger1 = logging.getLogger("logger1") 
logger1.setLevel(logging.DEBUG) 
logger1.addHandler(ch) 

logger2 = logging.getLogger("logger2") 
logger2.setLevel(logging.DEBUG) 
logger2.addHandler(ch) 

logger1.debug('log statement') 
logger2.debug('log statement') 

logger1とlogger2にdを動作させたい場合あなたは2つの異なるStreamHandlerを作成することができます

関連する問題