Heim >Backend-Entwicklung >Golang >Wie kann ich in Go mit Gorilla Mux sowohl HTTP-Anfragen als auch -Antworten effektiv protokollieren?

Wie kann ich in Go mit Gorilla Mux sowohl HTTP-Anfragen als auch -Antworten effektiv protokollieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 00:06:14359Durchsuche

How Can I Effectively Log Both HTTP Requests and Responses in Go with Gorilla Mux?

HTTP-Antworten mit Go und Gorilla protokollieren

Beim Erstellen komplexer Webanwendungen mit Go und dem Gorilla-Web-Toolkit werden sowohl HTTP-Anfragen als auch -Antworten protokolliert ist für das Debuggen und Analysieren unerlässlich. Während das Protokollieren von Anfragen mit dem LoggingHandler von Gorilla unkompliziert ist, stellt das Protokollieren von Antworten eine Herausforderung dar.

Antworten protokollieren

Die bereitgestellte Lösung von Eric Broda protokolliert Antworten effektiv, tut dies jedoch nicht Senden Sie die Antwort an den Client. Hier ist eine modifizierte Version, die die Funktionalität des ursprünglichen Codes beibehält und gleichzeitig sicherstellt, dass die Antwort den Client erreicht:

func logHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        x, err := httputil.DumpRequest(r, true)
        if err != nil {
            http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
            return
        }
        log.Println(fmt.Sprintf("%q", x))
        rec := httptest.NewRecorder()
        fn(rec, r)
        log.Println(fmt.Sprintf("%q", rec.Body))        

        // this copies the recorded response to the response writer
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}

Um diese Funktion zu nutzen, schließen Sie einfach Ihre Handler-Funktion mit logHandler ein:

http.HandleFunc("/", logHandler(myHandler))

Diese Änderung stellt sicher, dass sowohl Anfragen als auch Antworten protokolliert werden, während die Antwort weiterhin korrekt an den Client übermittelt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go mit Gorilla Mux sowohl HTTP-Anfragen als auch -Antworten effektiv 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