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

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

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 21:57:12766Durchsuche

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

Verbesserungen bei der Protokollierung von HTTP-Antworten

Die Protokollierung von HTTP-Anfragen ist ein entscheidender Aspekt des Debuggens und der Leistungsüberwachung. Während es Lösungen wie den LoggingHandler von Gorilla für die Protokollierung von Anfragen gibt, wird die Protokollierung von Antworten oft übersehen.

Um dieses Problem zu beheben, schauen wir uns eine modifizierte Version der akzeptierten Antwort von Eric Broda an, die sowohl Antworten protokolliert als auch an den Client weiterleitet:

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

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

Diese modifizierte Funktion erreicht Folgendes:

  • Protokolliert die Anfrage wie zuvor.
  • Erstellt einen httptest.NewRecorder, um die Antwort zu erfassen.
  • Ruft die ursprüngliche Handlerfunktion auf, die die Antwort in den Rekorder schreibt.
  • Protokolliert die Antwort vom Rekorder.
  • Kopiert die Kopfzeilen und den Statuscode des Rekorders in die tatsächliche Antwort Writer.
  • Leitet den Körper des Rekorders an den Client weiter.

Durch die Integration dieser modifizierten Funktion in Ihre Anwendung können Sie sowohl Anfragen als auch Antworten nahtlos protokollieren und so eine umfassende Ansicht Ihres HTTP bereitstellen Kommunikation.

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