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