Maison > développement back-end > Golang > le corps du texte

Comment capturer et enregistrer le corps de la réponse dans le middleware Gin ?

Mary-Kate Olsen
Libérer: 2024-11-12 01:44:01
original
238 Les gens l'ont consulté

How to Capture and Log Response Body in Gin Middleware?

Consignation du corps de réponse dans le middleware Gin

Dans le middleware, vous devrez peut-être capturer et enregistrer le corps de la réponse à des fins de débogage ou d'audit. Alors, comment pouvons-nous accéder au corps de la réponse à partir du contexte middleware dans Gin ?

Gin gère l'écriture des réponses en interne, ce qui rend difficile l'obtention directe du corps. Pour surmonter cela, nous devons implémenter notre propre Writer qui intercepte les opérations d'écriture. Voici une approche étape par étape :

  1. Créer un rédacteur personnalisé :
type bodyLogWriter struct {
    gin.ResponseWriter
    body *bytes.Buffer
}

func (w bodyLogWriter) Write(b []byte) (int, error) {
    w.body.Write(b)
    return w.ResponseWriter.Write(b)
}
Copier après la connexion

Cet rédacteur met en mémoire tampon le corps de la réponse tout en l'écrivant. à l'écrivain original.

  1. Implémenter un middleware :
func ginBodyLogMiddleware(c *gin.Context) {
    blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
    c.Writer = blw
    c.Next()

     statusCode := c.Writer.Status()
    if statusCode >= 400 {
        fmt.Println("Response body: " + blw.body.String())
    }
}
Copier après la connexion

Dans le middleware, nous attribuons notre blw d'écrivain personnalisé au contexte, garantissant que toutes les réponses seront capturées par celui-ci. Ensuite, nous enregistrons le corps si le code d'état est une erreur.

  1. Utilisez le middleware :
router.Use(ginBodyLogMiddleware)
Copier après la connexion

Maintenant, lorsque les demandes sont géré par votre routeur Gin, le middleware interceptera et enregistrera les corps de réponse pour les requêtes avec des codes d'état d'erreur.

Notez que cette approche n'enregistrera pas les corps de réponse pour les fichiers statiques, mais elle devrait répondre au cas d'utilisation de contenu le plus dynamique. Si vous devez intercepter tous les fichiers, vous aurez besoin d'un wrapper plus complexe autour du moteur Gin.

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