Maison > développement back-end > Golang > Comment puis-je enregistrer les réponses HTTP dans une application Web Go à l'aide de Gorilla Mux et des gestionnaires ?

Comment puis-je enregistrer les réponses HTTP dans une application Web Go à l'aide de Gorilla Mux et des gestionnaires ?

Patricia Arquette
Libérer: 2024-12-07 22:56:12
original
760 Les gens l'ont consulté

How Can I Log HTTP Responses in a Go Web Application Using Gorilla Mux and Handlers?

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)
    })
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal