0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python ログの重複が出たときに確認すること

Last updated at Posted at 2022-02-25

モジュールが増えてくるとロガーも必要に応じて追加しますよね。そのに落とし穴があって、ルートロガー以外にハンドラーを設定するとログの重複が発生するのです。

{
    'root': {
        'level': 'DEBUG',
        'handlers': ['console', 'file'],
        'propagate': True
    },
    'mod1': {
        'level': 'DEBUG',
        'handlers': ['console', 'file'],
    },
    'mod2': {
        'level': 'DEBUG',
        'handlers': ['console', 'file'],
    },
}

こんな感じにやると、ログの重複が起こります。

ドキュメントの一番上にこのような注釈があります。

注釈 ハンドラを、あるロガー と その祖先のロガーに接続した場合、同一レコードが複数回発行される場合があります。一般的に、ハンドラを複数のロガーに接続する必要はありません。propagate 設定が True のままになっていれば、ロガーの階層において最上位にある適切なロガーにハンドラを接続するだけで、そのハンドラは全ての子孫ロガーが記録する全てのイベントを確認することができます。一般的なシナリオでは、ハンドラをルートロガーに対してのみ接続し、残りは propagate にすべて委ねます。

正しい書き方

{
    'root': {
        'level': 'DEBUG',
        'handlers': ['console', 'file'],
        'propagate': False # 推奨
    },
    'mod1': {
        'level': 'DEBUG',
    },
    'mod2': {
        'level': 'DEBUG',
    },
}

結論

最上位のロガー(この例だとroot)に1つhandlersをセットすればよい。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?