Логирование uvicorn

Как логировать записи в файл, в uvicorn? По умолчанию, всё логируется в stdout, stderr.

Есть описание конфигов в uvicorn.config:

LOGGING_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(levelprefix)s %(message)s",
            "use_colors": None,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": '%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',  # noqa: E501
        },
    },
    "handlers": {
        "default": {
            "formatter": "default",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stderr",
        },
        "access": {
            "formatter": "access",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stdout",
        },
    },
    "loggers": {
        "uvicorn": {"handlers": ["default"], "level": "INFO"},
        "uvicorn.error": {"level": "INFO"},
        "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
    },
}

Но как им пользоваться, я не очень понял. Особенно, если я хочу использовать loguru, например.

Следует отметить, что в потрохах uvicorn, есть класс, переопределив который, можно переопределить и сам способ вывода:

uvicorn.protocols.http.httptools_impl:HttpToolsProtocol, внутри которого инициализируется: RequestResponseCycle. Здесь же, возможно, будет полезным убрать raises, чтобы портянки логов было удобно собирать. Но всё это выглядит оверхедом и должен быть более простой способ


Ответы (0 шт):