logging.infoはコンソールに表示されませんが、警告とエラーは表示されます


94

を使用してイベントをログに記録logging.infoすると、Pythonターミナルに表示されません。

import logging
logging.info('I am info')  # no output

対照的に、ログに記録されたイベントlogging.warnはターミナルに表示されます。

import logging
logging.warn('I am warning')  # outputs "I am warning"

logging.infoコンソールに印刷するためにできる環境レベルの変更はありますか?各Pythonファイルに変更を加えないようにしたい。

回答:


157

ルートロガーは常にデフォルトでWARNINGレベルになります。電話してみてください

logging.getLogger().setLevel(logging.INFO)

そして、あなたは大丈夫なはずです。


1
いいえ、一度だけ呼び出す必要があります。ロガーは階層として構築され、すべてのロギングはルートロガーに要約されます。に引数を指定しないgetLogger()ことで、ルートロガーが返されます。他のロガーを変更しない限り、ルートロガーを変更するだけで済みます。
ztyx 2012

18
logging.basicConfig(level = logging.INFO)が機能しない理由を知っていますか?ドキュメントでははっきりとわかりません。
ドッペルゲンガー2012

1
@ P1h3r1e3d13ベストプラクティスと思われるルートロガーが1つしかない場合は、そうです。
ztyx 2018年

7
これしないのはPython 3.5での作業:Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux >>> import logging >>> rootLog = logging.getLogger() >>> rootLog.setLevel(logging.INFO) >>> rootLog.info('all the kings horses') >>> rootLog.warning('all the kings men') all the kings men
ジェフ・K

6
@ jeffk、私と同じ3.6.8は、setLevelがlogging.INFOに設定されている場合でも情報メッセージを出力しません
Robert Lugg

28

@ztyxが言ったように、デフォルトのロガーレベルは警告です。あなたはそれをより低いレベルに設定する必要があります

あなたはlogging.basicConfigを使用してロガーレベルを設定することによってそれを行うことができます

logging.basicConfig(level=logging.DEBUG)

7
適切に機能するのに、なぜ私にはbasicConfig()機能しないのか疑問に思いlogging.getLogger().setLevel()ます。
ShayanAmani19年

17

上記の解決策は私にはうまくいきませんでしたが、ここのコードうまくいきました:

# set up logging to file
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

(読みやすくするためにコードの一部を省略しました)


1
これは私のために働いた唯一のものです。私はラインを持っていたlogging.error("Connection timed out!")とさえしてlevel=logging.DEBUGbasicConfig()、それがコンソールに印刷されないでしょう。ハンドラーを追加してくれてありがとう!
BruceWayne

使用しているハンドラーが役割を果たしていることに注意してください。たとえば、コードにNullHandlerが含まれている場合、ロギングレバーに関係なく何も出力されません。
ジョージ

ここでも同じです-レベル引数を省略しbasicConfigたり、INFOの上に設定したりすると、コンソールロガーは何もログに記録しません。省略した場合、一日中ロガーをbasicConfig呼び出すことができますsetLevel(そして、呼び出すことでレベルの変化を確認できますgetEffectiveLevel)が、レベルを下回るものはログに記録されませんWARNING。それが正しい動作ではないかどうかは実際にはわかりませんが、私が期待していたものではありません。
ハル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.