Enregistrement des réponses HTTP avec Go et les packages Mux et Handler de Gorilla
Dans une application Go, utilisation des packages Mux et Handler de Gorilla pour construire un site Web L'application présente un défi lorsque l'on tente de consigner les réponses HTTP. Bien que la journalisation des requêtes soit facile à réaliser avec LoggingHandler de Gorilla, la journalisation des réponses nécessite une approche différente.
Une solution potentielle consiste à créer une fonction middleware personnalisée qui enveloppe le gestionnaire d'origine. Ce middleware peut intercepter à la fois la requête et la réponse, permettant la journalisation des deux comme indiqué dans le code suivant :
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) }) }
Ce middleware peut ensuite être utilisé en encapsulant le gestionnaire d'origine dans le routeur de Gorilla :
// 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) }
En utilisant ce middleware personnalisé, les requêtes et les réponses HTTP peuvent être facilement enregistrées, améliorant ainsi l'observabilité de l'application et facilitant le débogage et les performances. surveillance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!