Maison > développement back-end > Golang > Comment puis-je enregistrer efficacement les réponses HTTP dans Go ?

Comment puis-je enregistrer efficacement les réponses HTTP dans Go ?

Patricia Arquette
Libérer: 2024-11-28 11:08:11
original
316 Les gens l'ont consulté

How Can I Effectively Log HTTP Responses in Go?

Consignation des réponses HTTP à l'aide de Go

La journalisation des requêtes dans Go est simple avec des packages comme le multiplexeur et le gestionnaire de Gorilla. Cependant, la journalisation des réponses peut être plus délicate. Cet article explique comment y parvenir.

Utilisation d'un gestionnaire de journalisation personnalisé

Une solution consiste à créer un gestionnaire de journalisation personnalisé qui encapsule une fonction de gestionnaire HTTP. Le code d'Eric Broda ci-dessous fournit un premier cadre :

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

Modifier la réponse

Pour envoyer réellement la réponse au client, une modification du code est nécessaire :

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

Ce code modifié enveloppe la fonction de gestionnaire et enregistre à la fois la requête et le corps de la réponse. En plaçant ce gestionnaire de journalisation dans la pile middleware, vous pouvez facilement enregistrer les réponses dans toute votre application.

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