問題
そこら辺に転がってるサンプルコードとして
cannot_log.py
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.info("hoge")
こういうのを見かけるが、これをそのままコピペしても動かない。
No handlers could be found for logger "__main__"
このエラーメッセージは2行目で出ている。
__name__
は最初に指定されたファイル名なので "__main__"
となる。
workaround.py
import logging
logging.info("ho")
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.info("hoge")
何故かlogging.
モジュールから一度でも何か吐き出しておくと動く。
INFO:__main__:hoge
解決策
loggerはコンフィグを与えないと行けない。
log_example.py
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.info("hoge")
logging.info("")
とした場合、内部で logging.basicConfig()
に相当する操作が行われている。