Как логировать сырые HTTP-запросы и ответы в FastAPI?
Вопрос проверяет умение логировать запросы и ответы для мониторинга и отладки.
Короткий ответ
Для логирования HTTP-запросов и ответов в FastAPI можно использовать пользовательский middleware, который перехватывает данные запроса и ответа.
Длинный ответ
Логирование в FastAPI полезно для мониторинга производительности и отладки. Для реализации логирования запросов и ответов используется middleware. В middleware можно перехватить запрос, записать его данные в лог, а затем сделать то же самое с ответом.
Пример реализации:
from fastapi import FastAPI, Request
import logging
app = FastAPI()
logging.basicConfig(level=logging.INFO)
@app.middleware("http")
async def log_requests(request: Request, call_next):
logging.info(f"Request: {request.method} {request.url}")
response = await call_next(request)
logging.info(f"Response: {response.status_code}")
return response
Рекомендации:
- Используйте специализированные библиотеки, такие как starlette-context, для сохранения и логирования контекста запросов.
- Убедитесь, что в логах не содержатся чувствительные данные, чтобы соответствовать стандартам безопасности.
Когда использовать:
- Для мониторинга API, анализа производительности или выявления ошибок.