Maison >développement back-end >Golang >Comment puis-je enregistrer efficacement les requêtes et les réponses HTTP dans Go avec Gorilla Mux ?

Comment puis-je enregistrer efficacement les requêtes et les réponses HTTP dans Go avec Gorilla Mux ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 00:06:14316parcourir

How Can I Effectively Log Both HTTP Requests and Responses in Go with Gorilla Mux?

Consignation des réponses HTTP avec Go et Gorilla

Lors de la création d'applications Web complexes avec Go et la boîte à outils Web Gorilla, journalisation des requêtes et des réponses HTTP est essentiel pour le débogage et l’analyse. Bien que la journalisation des demandes soit simple à l'aide de LoggingHandler de Gorilla, la journalisation des réponses pose un défi.

Consignation des réponses

La solution fournie par Eric Broda enregistre efficacement les réponses, mais ce n'est pas le cas. envoyer la réponse au client. Voici une version modifiée qui conserve les fonctionnalités du code d'origine tout en garantissant que la réponse parvienne au client :

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)
    }
}

Pour utiliser cette fonction, enveloppez simplement votre fonction de gestionnaire avec logHandler :

http.HandleFunc("/", logHandler(myHandler))

Cette modification garantit que les demandes et les réponses sont enregistrées tout en fournissant correctement la réponse au client.

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!

Déclaration:
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