Heim  >  Artikel  >  Backend-Entwicklung  >  Wie protokolliere ich HTTP-Antworten in Go mit Middleware-Verkettung?

Wie protokolliere ich HTTP-Antworten in Go mit Middleware-Verkettung?

DDD
DDDOriginal
2024-10-28 08:55:29127Durchsuche

How to Log HTTP Responses in Go with Middleware Chaining?

Antworten auf eingehende HTTP-Anfragen in http.HandleFunc protokollieren

Als Antwort auf die in einem früheren Thread gestellte Frage schlägt dieser Artikel vor, HTTP-Antworten von Live-Servern ohne Umsortierung zu protokollieren zu gefälschten Anfragen. Das Ziel besteht darin, sowohl Header als auch JSON-Nutzlasten für eine gründliche Analyse zu erfassen.

Mithilfe des Konzepts der Middleware-Verkettung können wir einen benutzerdefinierten HTTP-Handler erstellen, der Antworten abfängt und relevante Informationen protokolliert. So geht's:

Middleware-Chaining-Ansatz

Mit Middleware-Chaining definieren Sie Middleware-Funktionen, die vor oder nach der Haupthandlerfunktion ausgeführt werden können. Diese Middlewares können verschiedene Aufgaben wie Protokollierung, Validierung oder Sicherheitsüberprüfungen ausführen.

Funktionale Handler-Kombinatoren implementieren

Anstelle magischer Negroni-Lösungen können wir unsere eigenen funktionalen Handler-Kombinatoren definieren. Jeder Kombinator übernimmt eine bestimmte Aufgabe und kann zu einer Ausführungskette kombiniert werden. Sie könnten beispielsweise einen Kombinator für die Antwortprotokollierung erstellen:

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

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

Middleware-Ketten verwalten

Um die Protokollierungs-Middleware auf alle Handler in einer bestimmten Kategorie anzuwenden, können wir einen Standard-Handler erstellen:

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

Dieser Kombinator stellt sicher, dass alle über NewDefaultHandler erstellten Ketten die Antwortprotokollierung zusammen mit allen anderen in NewOtherStuffHandler definierten Standardfunktionen umfassen.

Durch die Nutzung dieser Techniken können Sie HTTP-Antworten von nahtlos protokollieren Ihr Live-Webdienst, der wertvolle Erkenntnisse für die Fehlerbehebung und Analyse liefert.

Das obige ist der detaillierte Inhalt vonWie protokolliere ich HTTP-Antworten in Go mit Middleware-Verkettung?. 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