Heim >Backend-Entwicklung >Golang >Wie kann ich HTTP-Antworten in einer Go-Webanwendung mit Gorilla Mux und Handlern protokollieren?
Protokollieren von HTTP-Antworten mit Go und den Mux- und Handler-Paketen von Gorilla
In einer Go-Anwendung die Verwendung der Mux- und Handler-Pakete von Gorilla zum Aufbau eines Webs Die Anwendung stellt eine Herausforderung dar, wenn versucht wird, HTTP-Antworten zu protokollieren. Während die Protokollierung von Anfragen mit dem LoggingHandler von Gorilla problemlos möglich ist, erfordert die Protokollierung von Antworten einen anderen Ansatz.
Eine mögliche Lösung besteht darin, eine benutzerdefinierte Middleware-Funktion zu erstellen, die den ursprünglichen Handler umschließt. Diese Middleware kann sowohl die Anfrage als auch die Antwort abfangen und ermöglicht so die Protokollierung beider, wie im folgenden Code gezeigt:
func logResponse(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Capture the request requestBytes, err := httputil.DumpRequest(r, true) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } log.Printf("%q", requestBytes) // Create a new ResponseRecorder to capture the response rec := httptest.NewRecorder() next.ServeHTTP(rec, r) // Capture the response responseBytes := rec.Body.Bytes() log.Printf("%q", responseBytes) // Copy the recorder's headers and body into the original ResponseWriter for k, v := range rec.HeaderMap { w.Header()[k] = v } w.WriteHeader(rec.Code) w.Write(responseBytes) }) }
Diese Middleware kann dann verwendet werden, indem der ursprüngliche Handler in Gorillas Router eingebettet wird:
// Import Gorilla packages import ( "github.com/gorilla/mux" "github.com/gorilla/handlers" ) func main() { // Setup Gorilla router r := mux.NewRouter() // Wrap the handler with the logging middleware wrappedHandler := handlers.LoggingHandler(os.Stdout, http.HandlerFunc(handler)) // Register the handler with the router r.Handle("/api/v1/users", wrappedHandler) // Start the server http.ListenAndServe(":8080", r) }
Durch die Verwendung dieser benutzerdefinierten Middleware können sowohl HTTP-Anfragen als auch -Antworten einfach protokolliert werden, was die Beobachtbarkeit der Anwendung verbessert und das Debugging und die Leistung unterstützt Überwachung.
Das obige ist der detaillierte Inhalt vonWie kann ich HTTP-Antworten in einer Go-Webanwendung mit Gorilla Mux und Handlern protokollieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!