Heim >Backend-Entwicklung >Golang >Wie kann ich sowohl HTTP-Anfragen als auch -Antworten in Go effizient protokollieren?

Wie kann ich sowohl HTTP-Anfragen als auch -Antworten in Go effizient protokollieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-04 00:09:10657Durchsuche

How Can I Efficiently Log Both HTTP Requests and Responses in Go?

Anfragen und Antworten in Go protokollieren

Beim Erstellen einer komplexen Anwendung in Go ist die effiziente Handhabung von HTTP-Anfragen und -Antworten von entscheidender Bedeutung. Während die Mux- und Handler-Pakete des Gorilla-Web-Toolkits die Bearbeitung von Anfragen vereinfachen, bleibt die Protokollierung von Antworten eine Herausforderung.

Um dieses Problem zu beheben, bietet die akzeptierte Antwort von Eric Broda eine Lösung, die Anfragedetails erfasst. Es gelingt jedoch nicht, die tatsächlich an den Client gesendete Antwort zu protokollieren. Um dieses Problem zu beheben, ist eine Änderung des Codes erforderlich:

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)
    }
}

Dieser geänderte Code fängt die Antwort ab und kopiert sie an den Antwortschreiber, wodurch die Protokollierung sowohl von Anfragen als auch von Antworten ermöglicht wird.

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