我正在使用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,该类别设置了用于所有新记录器的类。