我已按照命名Python记录器中所述的做法命名了我的Python记录器
如果我使用basicConfig(),一切都会正常。但是现在我正尝试使用配置文件和dictConfig()在运行时配置记录器。
http://docs.python.org/2/library/logging.config.html#dictionary-schema-details上的文档似乎说我可以在字典中有一个“ root”键来配置根记录器。但是,如果仅配置此记录器,则不会得到任何输出。
这是我所拥有的:
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()
为什么这不会产生任何日志记录输出,以及修复它的正确方法是什么?
原因是您尚未disable_existing_loggers: false
在YAML中指定,并且__main__
记录器在dictConfig
调用时已经存在。因此该记录器被禁用(因为未在配置中显式命名该记录器-如果已命名,则未禁用)。
只需将该行添加到您的YAML中:
version: 1
disable_existing_loggers: false
formatters:
simple:
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句