Pythonでのロギングは非常に便利な機能ですが、モジュールが増えてくるとロガーも必要に応じて追加しますよね。その際に落とし穴があり、ルートロガー以外にハンドラーを設定するとログの重複が発生することがあります。
{
'root': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
'propagate': True
},
'mod1': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
},
'mod2': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
},
}
上記のような設定では、ログの重複が起こります。これは、ハンドラがあるロガーとその祖先のロガーに接続されている場合、同一レコードが複数回発行されるためです。
解決策としては、propagate
設定をTrue
のままにして、ロガーの階層において最上位にある適切なロガーにハンドラを接続するだけです。そのハンドラは全ての子孫ロガーが記録する全てのイベントを確認することができます。
{
'root': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
'propagate': False # 推奨
},
'mod1': {
'level': 'DEBUG',
},
'mod2': {
'level': 'DEBUG',
},
}
このように設定することで、最上位のロガー(この例だとroot)に1つhandlersをセットすればよいです。これにより、ログの重複を防ぐことができます。
以上、Pythonでのログの重複を防ぐ方法について説明しました。この情報が皆さんのPythonプログラミングに役立つことを願っています。