1. ホーム
  2. python

[解決済み】Pythonのロガーがログファイルに加えて標準出力にも全メッセージを出力するようにする。

2022-01-26 12:07:54

質問事項

を使用してPythonのロギングを行う方法はありますか? logging モジュールは自動的に標準出力に出力します。 さらに をログファイルに書き出すことができますか?例えば、私は、すべての呼び出しを logger.warning , logger.critical , logger.error にコピーされ、目的の場所に移動しますが、さらに常に stdout . などのメッセージが重複しないようにするためです。

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

解決方法は?

すべてのログ出力は、ハンドラによって処理されます。 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)