„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie protokolliere ich HTTP-Antworten, ohne http.ResponseWriter zu ändern?

Wie protokolliere ich HTTP-Antworten, ohne http.ResponseWriter zu ändern?

Veröffentlicht am 09.11.2024
Durchsuche:127

How to Log HTTP Responses Without Modifying http.ResponseWriter?

HTTP-Antwort in http.HandleFunc protokollieren

Dieser Artikel beschreibt einen alternativen Ansatz zum Erhalten der HTTP-Antwort für Protokollierungszwecke, ohne auf gefälschte Anforderungen zurückzugreifen oder http.ResponseWriter zu ändern. Wir führen das Konzept der Middleware-Verkettung ein und stellen eine Implementierung im funktionalen Stil bereit.

Middleware-Verkettung

Middleware-Verkettung beinhaltet die Übergabe der Kontrolle an eine Kette von Handlern, die bestimmte Aufgaben vor und nach der Ausführung der Hauptanforderung ausführen. Diese als Middleware bezeichneten Handler empfangen die Anfrage und den nächsten Handler in der Kette und sorgen so für eine geordnete Ausführung.

Wir definieren eine benutzerdefinierte Middleware-Funktion, die als HTTP-Handler-Kombinator fungiert:

func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace the response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy data from the recorder to the original response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}

Anwenden der Lösung

Um die automatische Antwortprotokollierung für alle Handler in einer bestimmten Kategorie sicherzustellen, erstellen wir einen weiteren Handler-Kombinator, der die Protokollierungs-Middleware kapselt:

func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}

Jetzt umfasst jede mit NewDefaultHandler instanziierte Handlerkette automatisch die Antwortprotokollierung und andere Standardverhalten.

h := NewDefaultHandler(...)

Fazit

Mithilfe der Middleware-Verkettung können wir HTTP-Antworten transparent abfangen und protokollieren, ohne dass Anfragen gefälscht oder geändert werden müssen http.ResponseWriter. Dieser Ansatz ermöglicht eine modulare Protokollierung und vereinfacht die Handlerverwaltung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3