Логирование 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, чтобы портянки логов было удобно собирать. Но всё это выглядит оверхедом и должен быть более простой способ