仕事やプライベートで調べたことのメモ書きなど(@札幌)

仕事やプライベートで調べたこと、興味ある事のメモ書きです。2016年4月から札幌で働いてます。※このブログは個人によるもので、団体を代表するものではありません。

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())

以上