logging.basicConfig() はすべてのログ出力に先立って呼び出す必要がある

logging.basicConfig() はルートロガーがまだ初期化されていない場合に初期化する関数だけど、一度でもログを出力すると自動でルートロガーが初期化されてしまうので basicConfig() は無効になってしまう。

import logging
import foo
...
if __name__ == '__main__':
    logging.basicConfig(...)
    ...

のような処理をしているときは、ロードしたモジュールの初期化処理や自身の初期化処理内でログを出力する可能性を考慮する必要がある。必要があれば、loggingのセットアップだけ先頭で行う。

import logging
if __name__ == '__main__':
    logging.basicConfig(...)

import foo
...
if __name__ == '__main__':
    ...
このブログに乗せているコードは引用を除き CC0 1.0 で提供します。