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

DDD
Freigeben: 2024-10-28 08:55:29
Original
127 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!