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!