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