Roh-HTTP-Anfrage/-Antwort in Python FastAPI für bestimmte Routen protokollieren
Problem:
Wir entwickeln ein Webdienst mit FastAPI, der in Kubernetes bereitgestellt wird. Zu Prüfzwecken müssen wir den JSON-Rohtext der Anfragen und Antworten bestimmter Routen protokollieren. Die JSON-Körper der Anfrage und Antwort sind ungefähr 1 MB groß und es ist wichtig, dass der Protokollierungsprozess die Antwortzeiten nicht wesentlich beeinflusst.
Lösung:
Option 1: Middleware verwenden
-
Erstellen Sie eine Middleware:
Definieren Sie eine Funktion und verwenden Sie den Dekorator @app.middleware("http"), um eingehende Anfragen und ausgehende Antworten zu verarbeiten.
-
Anforderungstext erfassen:
Verwenden Sie request.body() oder request.stream(), um den Anfragetext zu erfassen.
-
Antwort verarbeiten Textkörper:
Lesen Sie den Antworttext als Byte-Objekt und geben Sie eine benutzerdefinierte Antwort an den Client zurück.
-
Daten protokollieren:
Verwenden Sie eine Hintergrundaufgabe, um die Anfrage zu protokollieren und Antworttexte in eine Datei oder Datenbank.
Option 2: Benutzerdefinierte APIRoute verwenden Klasse
-
Benutzerdefinierte APIRoute definieren:
Erstellen Sie eine benutzerdefinierte APIRoute-Klasse, die die APIRoute-Basisklasse erweitert und die Änderung von Anforderungs- und Antworttexten ermöglicht. -
Anforderungstext verarbeiten:
Erfassen Sie im benutzerdefinierten Routenhandler den Anforderungstext, bevor er ihn erreicht der Endpunkt-Handler.
-
Antworttext verarbeiten:
Ändern Sie den Antworttext und erstellen Sie ein neues Antwortobjekt. Wenn die ursprüngliche Antwort eine StreamingResponse ist, fügen Sie dem Streaming-Iterator Protokollierungsfunktionen hinzu.
-
Hintergrundprotokollierung:
Hängen Sie die Protokollierungsfunktion als BackgroundTask an das Antwortobjekt an.
Hinweis:
Beachten Sie die Größe der Anfrage- und Antworttexte als groß Nutzlasten können zu Speicherproblemen oder Verzögerungen sowohl auf der Server- als auch auf der Clientseite führen. Es kann erforderlich sein, die Protokollierung auf bestimmte Routen zu beschränken oder Streaming-Antworten von der Protokollierung auszuschließen.
Das obige ist der detaillierte Inhalt vonWie kann ich Roh-HTTP-Anforderungs-/Antwort-JSON in FastAPI für die Prüfung effizient protokollieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!