Pythonのloggingでログが重複して困った話 [fbprophet]
Pythonでログが重複する話は比較的よくある模様。
自分で作ったLoggerでログが重複してしまったのであれば以下のようなものも参考になるが・・・。
uyamazak.hatenablog.com
今回はいろいろ調査した挙句、インポートして使っているライブラリであるfbprophetに原因があった。
github.com
このライブラリは以下のようにLoggerを初期化していたのです。
github.com
basicConfigを見てみると、、、Root Loggerが生成されます。
docs.python.org
自分でロガーを別途生成して制御していたのにもかかわらず、ライブラリで勝手にRoot Loggerを作るため、自分で作ったLoggerへのログ出力も重複してしまうことになったのです。。。
そういう時は、先回りしてLoggerを殺して(もしくは自分の仕様にあったLoggerを生成して)あげましょう。
Pythonのloggingか階層構造を持っているから、とも言えます。
qiita.com
ちなみに、fbprophetでは、内部的にpystanも使っており、pystanも同様のコードでLoggerを初期化してるので要注意。
Root Loggerが勝手に作られる処理を殺したければ以下のようなコードでどうぞ♪(この場合は、当然、fbprophetからログが出なくなるので、出力したい場合は適切なHandlerを設定してください。)
logging.getLogger('fbprophet').addHandler(logging.NullHandler()) logging.getLogger('pystan').addHandler(logging.NullHandler())
以上