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!