\

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プログラミングに役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です