Python - 新しいファイルに出力するには、basicConfig を使用しますか?

okwaves2024-01-25  9

モード コードでロギング ターゲット ファイルをオンザフライで変更したいと考えています。次のスニペットを考えてみましょう。

import logging
import pathlib

log = logging.getLogger()

logging.basicConfig(handlers=[logging.FileHandler("foo.log")])
log.error("foo")
logging.basicConfig(handlers=[logging.FileHandler("bar.log")])
log.error("bar")

print("--foo.log--\n",pathlib.Path("foo.log").read_text())
print("--bar.log--\n",pathlib.Path("bar.log").read_text())

出力は次のとおりです

--foo.log--
 ERROR:root:foo
ERROR:root:bar
--bar.log--
 

おわかりのとおり、これは私が期待しているものではありません。それぞれのファイルにログが記録されないのはなぜですか?失敗するのはなぜですか? どうすれば修正できますか?



------------------------

basicConfig のドキュメント (https://docs.python.org/3.7/library/logging.html#logging.basicConfig) には次のように記載されています。

ルート ロガーにすでにハンドラーが設定されている場合、この関数は何も行いません。

この場合、basicConfig への 2 回目の呼び出しは単に何も行いません。

手動で行う必要がありますy FileHandler の登録を解除し、basicConfig を呼び出すか、新しいハンドラーを手動で登録します。たとえば、SO のこの質問を参照してください。

新しいファイルへのログ記録を再開します (Python)

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。