アンチパターン: Pythonのloggerインスタンスを関数間でバトンリレーする
質問
同じlogger名になることで、「関数」ではなく「処理」の文脈でログを追いやすくなるのでは?
回答
ロギングがアプリケーションの主たる関心事ではないため、関数シグネチャに密結合させるべきではありません もう少し詳しく
loggingはアプリケーションの主たる関心事ではない
主たる関心事 = それを除いたら目的を達成しないもの
要件を達成するために必要なものであっても、それら全てを引数で渡すのは目的からずれている
DB接続情報(やDjangoならsettings)なども同様に「必須ではあるけど主たる関心事ではない」
関数引数にする場合、以下のデメリットを許容する必要がある
関数引数が増え、呼び出し時の複雑度と結合度が増す
loggingに興味が無い呼び出し元もloggerインスタンスを渡す必要が出てくる 処理の文脈でログを追うには中途半端
フレームワークやライブラリの内部にloggerインスタンスを渡せない
全体に適用できる手法ではない
その実装が必要無いところでも使われ、全体的に複雑度が増していく
気にしておくこと
loggerインスタンスを関数間で持ち回ること自体に悪影響はない
Python標準loggingのloggerインスタンスは、インスタンス化したモジュールがどこかに関係なく動作する pythonのlogging にはpropagateの仕組みがあり、moduleの名前空間構造に依存して使うことを想定している
以下、断片的な情報への入り口