Python ロガーですべてのメッセージをログファイルに加えて stdout に出力するようにする 質問する

Python ロガーですべてのメッセージをログファイルに加えて stdout に出力するようにする 質問する

モジュールを使用した Python ログ出力で、出力先となるログ ファイルに加えて、logging stdout にも自動的に出力する方法はありますか? たとえば、、、のすべての呼び出しが目的の場所に行くようにしたいのですが、さらに常に にコピーされます。これは、次のようなメッセージの重複を避けるためです。logger.warninglogger.criticallogger.errorstdout

mylogger.critical("something failed")
print("something failed")

ベストアンサー1

すべてのログ出力はハンドラによって処理されます。logging.StreamHandler()ルートロガーへ。

stdout以下は、ストリーム ハンドラー (デフォルトの の代わりにを使用stderr) を構成し、それをルート ロガーに追加する例です。

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.DEBUG)

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

おすすめ記事