Heim >Backend-Entwicklung >Golang >Wie protokolliere ich HTTP-Antworten, ohne http.ResponseWriter zu ändern?

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 23:19:29591Durchsuche

How to Log HTTP Responses Without Modifying http.ResponseWriter?

HTTP-Antwort in http.HandleFunc protokollieren

In diesem Artikel wird ein alternativer Ansatz zum Erhalten der HTTP-Antwort für Protokollierungszwecke beschrieben, ohne auf gefälschte Anforderungen zurückzugreifen oder http.ResponseWriter zu ändern. Wir stellen das Konzept der Middleware-Verkettung vor und bieten eine Implementierung im funktionalen Stil.

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:

<code class="go">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)
    }
}</code>

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:

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>

Jetzt wird jede Handler-Kette mit instanziiert NewDefaultHandler schließt automatisch die Antwortprotokollierung und andere Standardverhaltensweisen ein.

<code class="go">h := NewDefaultHandler(...)</code>

Fazit

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

Das obige ist der detaillierte Inhalt vonWie protokolliere ich HTTP-Antworten, ohne http.ResponseWriter zu ändern?. 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