Python ロガーの命名で説明されている方法に従って、Python ロガーに名前を付けました。
basicConfig() を使用すると、すべて正常に動作します。しかし、今は構成ファイルと dictConfig() を使用して、実行時にロガーを構成しようとしています。
http://docs.python.org/2/library/logging.config.html#dictionary-schema-detailsのドキュメントには、ルートロガーを構成する辞書に「ルート」キーを含めることができると書かれているようです。しかし、このロガーのみを構成すると、出力が得られません。
ここに私が持っているものがあります:
logging_config.yaml
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(pathname)s:%(lineno)s - %(message)s'
datefmt: '%Y%m%d %H:%M:%S'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: 'test.log'
mode: "w"
# If I explicitly define a logger for __main__, it works
#loggers:
# __main__:
# level: DEBUG
# handlers: [console, file]
root:
level: DEBUG
handlers: [console, file]
test_log.py
import logging
logger = logging.getLogger(__name__)
import logging.config
import yaml
if __name__ == "__main__":
log_config = yaml.load(open("logging_config.yaml", "r"))
logging.config.dictConfig(log_config)
#logging.basicConfig() #This works, but dictConfig doesn't
logger.critical("OH HAI")
logging.shutdown()
これでログ出力が生成されないのはなぜですか? また、それを修正する適切な方法は何ですか?