loggingのログレベルについて

pythonのloggingはLoggerとHandlerの両方にログレベルを指定できるのはなぜなんだろうと思って調べた。

http://www.python.jp/doc/nightly/library/logging.html#id4

リファレンスマニュアルにちゃんと説明が書いてある。

Handler.setLevel() メソッドは、
ロガーオブジェクトの場合と同様に、
適切な出力先に振り分けられるべき最も低い深刻度を指定します。
なぜ 2 つも setLevel() メソッドがあるのでしょうか? 
ロガーで設定されるレベルは、付随するハンドラにどんな深刻度のメッセージを渡すか決めます。
ハンドラで設定されるレベルは、ハンドラがどのメッセージを送るべきか決めます。

ロガーの中に複数のハンドラを指定できるけど、
まずログメッセージを送ったら

  1. そのログメッセージがロガーのログレベルに満たなければ何もしない。
  2. ロガーのログレベルを満たした場合、それぞれのハンドラにメッセージを送る。
  3. ハンドラに設定されているログレベルを満たすものだけ、処理される。

こうなることがわかってすっきりした。