Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Roh-HTTP-Anforderungs-/Antwort-JSON in FastAPI für die Prüfung effizient protokollieren?

Wie kann ich Roh-HTTP-Anforderungs-/Antwort-JSON in FastAPI für die Prüfung effizient protokollieren?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 20:20:11332Durchsuche

How Can I Efficiently Log Raw HTTP Request/Response JSON in FastAPI for Auditing?

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

  1. Erstellen Sie eine Middleware:
    Definieren Sie eine Funktion und verwenden Sie den Dekorator @app.middleware("http"), um eingehende Anfragen und ausgehende Antworten zu verarbeiten.
  2. Anforderungstext erfassen:
    Verwenden Sie request.body() oder request.stream(), um den Anfragetext zu erfassen.
  3. Antwort verarbeiten Textkörper:
    Lesen Sie den Antworttext als Byte-Objekt und geben Sie eine benutzerdefinierte Antwort an den Client zurück.
  4. Daten protokollieren:
    Verwenden Sie eine Hintergrundaufgabe, um die Anfrage zu protokollieren und Antworttexte in eine Datei oder Datenbank.

Option 2: Benutzerdefinierte APIRoute verwenden Klasse

  1. Benutzerdefinierte APIRoute definieren:
    Erstellen Sie eine benutzerdefinierte APIRoute-Klasse, die die APIRoute-Basisklasse erweitert und die Änderung von Anforderungs- und Antworttexten ermöglicht.
  2. Anforderungstext verarbeiten:
    Erfassen Sie im benutzerdefinierten Routenhandler den Anforderungstext, bevor er ihn erreicht der Endpunkt-Handler.
  3. 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.
  4. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn