問題
そこら辺に転がってるサンプルコードとして
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() に相当する操作が行われている。