Wie protokolliere ich rohe HTTP-Anfragen/-Antworten in Python FastAPI?
FastAPI bietet mehrere Methoden zum Erfassen und Protokollieren von rohen HTTP-Anfragen und -Antworten. Eingehen auf spezifische Anforderungen und Leistungsaspekte.
Option 1: Middleware
Mit Middleware können Sie Anfragen und Antworten abfangen und verarbeiten. Sie können eine Middleware erstellen, die den Anforderungstext in einem Stream verarbeitet und speichert. Lesen Sie den Antworttext in ein Bytes-Objekt ein und geben Sie eine benutzerdefinierte Antwort zurück. Verwenden Sie eine BackgroundTask, um die Daten asynchron zu protokollieren, um eine Beeinträchtigung der Antwortzeit zu vermeiden.
Beispiel:
async def some_middleware(request: Request, call_next): req_body = await request.body() response = await call_next(request) res_body = b'' async for chunk in response.body_iterator: res_body += chunk task = BackgroundTask(log_info, req_body, res_body) return Response(content=res_body, background=task)
Option 2: Benutzerdefinierte APIRoute-Klasse
Erstellen Sie eine benutzerdefinierte APIRoute-Klasse, um die Anforderungs- und Antworttexte zu bearbeiten. Mit diesem Ansatz können Sie die Protokollierung auf bestimmte Routen beschränken, die in einem APIRouter definiert sind.
Beispiel:
class LoggingRoute(APIRoute): async def custom_route_handler(request: Request) -> Response: req_body = await request.body() response = await original_route_handler(request) res_body = b'' async for item in response.body_iterator: res_body += item task = BackgroundTask(log_info, req_body, res_body) response = Response(content=res_body, background=task) return response
Berücksichtigen Sie die Einschränkungen beim Speichern großer Anforderungs-/Antworttexte Speicher und verwenden Sie eine BackgroundTask, um eine Blockierung der Anforderungsverarbeitung zu vermeiden. Beschränken Sie bei Bedarf die Protokollierung auf bestimmte Routen oder schließen Sie Endpunkte aus, die Streaming-Antworten zurückgeben.
Das obige ist der detaillierte Inhalt vonWie protokolliere ich rohe HTTP-Anfragen und -Antworten in Python FastAPI?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!