【发布时间】:2019-08-11 15:23:15
【问题描述】:
我正在尝试使用 dictConfig 设置三个不同的记录器,由于某种原因,最后一个记录器似乎总是覆盖在它之前创建的两个记录器的配置。这是我正在使用的代码:
import logging
import logging.config
def setup_logger(name, level, ContentFormat='%(asctime)s %(levelname)s %(message)s', DateTimeFormat='%Y-%m-%d %H:%M:%S'):
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'default': {'format': ContentFormat, 'datefmt': DateTimeFormat},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': level,
'formatter': 'default',
'stream': 'ext://sys.stdout'
}
},
'loggers': {
'a': {
'level': level,
'handlers': ['console']
},
'b': {
'level': level,
'handlers': ['console']
},
'c': {
'level': level,
'handlers': ['console']
}
}
})
return logging.getLogger(name)
logger_a = setup_logger(name='a', level=logging.INFO, ContentFormat='A: %(message)s')
logger_b = setup_logger(name='b', level=logging.INFO, ContentFormat='B: %(message)s')
logger_c = setup_logger(name='c', level=logging.INFO, ContentFormat='C: %(message)s')
logger_a.info('logger_a')
logger_b.info('logger_b')
logger_b.info('logger_c')
这是输出:
C: logger_a
C: logger_b
C: logger_c
相反,我希望看到的是:
A: logger_a
B: logger_b
C: logger_c
任何想法我做错了什么?我什至尝试过制作多个处理程序,但仍然遇到同样的问题。
我有这个函数的另一个版本,它使用以下代码,我可以多次调用它来创建具有不同设置的多个单独的记录器,但我真的想弄清楚如何使用 dictConfig 来做到这一点,或者至少明白我哪里错了:
logger = logging.getLogger(name)
logger.setLevel(level)
# create console handler for printing logging output to the screen as well
formatter = logging.Formatter(ContentFormat, DateTimeFormat)
handler = logging.StreamHandler()
handler.setLevel(level)
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
【问题讨论】:
标签: python-3.x logging