Pythonのロギングシステムは非常に強力で、アプリケーションのデバッグに役立ちます。しかし、時々、同じメッセージが2回出力されるという問題に遭遇するかもしれません。これは通常、ロガーの伝播(propagation)設定やルートロガーの使用方法に関連しています。
ダブル出力の原因
Pythonのロギングシステムでは、ロガーは親ロガーにメッセージを伝播します。つまり、あるロガーでログメッセージを生成すると、そのメッセージはそのロガーのすべての親に伝播されます。これがダブル出力の一般的な原因です。
解決策
伝播の無効化
子ロガーからの伝播を無効にすることで、メッセージがルートロガーに伝播されるのを防ぐことができます。以下にその方法を示します。
logger = logging.getLogger('my_logger')
logger.propagate = False
ルートロガーの非使用
ルートロガーを使用しないことも、ダブル出力を防ぐ方法の一つです。以下にその方法を示します。
logger = logging.getLogger('my_logger')
まとめ
Pythonのロギングシステムは強力ですが、正しく理解して使用しないと予期しない結果をもたらすことがあります。この記事では、ダブル出力問題の一般的な原因とその解決策について説明しました。これらの知識を活用して、Pythonのロギングシステムを最大限に活用しましょう。