我正在使用dictconfig来设置记录,例如:
LOGGING_CONF: typing.Dict[str, typing.Any] = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"format": "%(asctime)s %(levelname)s %(name)s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "default",
"stream": "ext://sys.stdout",
"level": "DEBUG",
},
},
"loggers": {
"my_app": {
"class": "my_app.logging.MyLogger", <- Its about this line
# "()": "my_app.logging.MyLogger", <- also tried this without success
"level": "DEBUG",
"handlers": ["console"],
"propagate": False,
},
"uvicorn": {
"level": "DEBUG",
"handlers": ["console"],
"propagate": False,
},
},
}
def init_logging() -> None:
logging.config.dictConfig(LOGGING_CONF)
我的问题是围绕my_app
Logger,我想使用自定义日志记录类,该类基于其他参数(例如,使用数据库模型参考丰富)来执行某些事情。
上面的该配置不会引起任何错误,但也没有使用自定义记录类。有没有一种方法可以使用dictConfig
配置自定义记录类?
分析解答
来自logging.config
文档:
The schema supports user-defined objects for handlers, filters and formatters. (Loggers do not need to have different types for different instances, so there is no support in this configuration schema for user-defined logger classes.)
所以不,您不能使用logging.config.dictConfig
这样做。据我所知,设置Logger类的唯一方法是使用logging.setLoggerClass
,该类别设置了用于所有新记录器的类。