環境
- Windows10
- Python 3.6.6
やりたいこと
Pythonのlogging機能を使って、コンソールとログファイルにログを出力したいです。
other
という名前のlogger以外は、すべてINFOレベルで出力したいので、ルートロガーのレベルをINFOにしました。
$ ls
logger-main.py
fuga.py
logging.yaml
logger-main.py
import logging
import logging.config
import yaml
from fuga import Fuga
if __name__ == "__main__":
logging.config.dictConfig(yaml.load(open("logging.yaml").read()))
f = Fuga()
fuga.py
import logging
import yaml
logger = logging.getLogger(__name__)
class Fuga:
def __init__(self):
logger.debug("Fuga Constructor in debug")
logger.info("Fuga Constructor in info")
logger.yaml
version: 1
formatters:
customFormatter:
format: '%(asctime)s : %(levelname)s : %(module)s : %(message)s'
handlers:
fileRotatingHandler:
class: logging.handlers.TimedRotatingFileHandler
level: DEBUG
filename: logfile/logger.log
when: 'D'
formatter: customFormatter
consoleHandler:
class: logging.StreamHandler
level: DEBUG
formatter: customFormatter
loggers:
other:
level: DEBUG
root:
level: INFO
handlers: [fileRotatingHandler, consoleHandler]
問題
$ python logger-main.py
を実行しましたが、標準出力とログファイルには何も出力されませんでした。
ルートロガーをINFOレベルに設定したので、fugaのinfoログは出力されると思っていました。
以下のように、logger.yamlのloggers
部分にfuga
を追加したら、
loggers:
other:
level: DEBUG
hoge:
level: DEBUG
次のように、標準出力とログファイルに出力されていました。
2019-03-16 16:22:13,791 : DEBUG : fuga : Fuga Constructor in debug
2019-03-16 16:22:13,791 : INFO : fuga : Fuga Constructor in info
質問
なぜ最初の状態では、fuga
のinfoログが出力されなかったのでしょうか?
私は「ルートロガー」の使い方を勘違いしているのでしょうか?