Maison  >  Article  >  développement back-end  >  Comment enregistrer les données de réponse de http.ResponseWriter dans Go ?

Comment enregistrer les données de réponse de http.ResponseWriter dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-06 01:41:02715parcourir

How to Log Response Data from http.ResponseWriter in Go?

Consignation des données de http.ResponseWriter

Dans Go, vous pouvez utiliser diverses techniques pour enregistrer les données émises à partir d'un cycle requête-réponse HTTP. Une question courante consiste à obtenir les données écrites sur http.ResponseWriter à des fins de journalisation.

Solution : Utilisation de io.MultiWriter

Pour capturer les données de réponse, vous pouvez utiliser le io.MultiWriter pour dupliquer les écritures sur un graveur distinct. Dans votre code, vous pouvez créer une nouvelle instance bytes.Buffer comme tampon de journal et la transmettre comme l'un des rédacteurs à io.MultiWriter. En utilisant MultiWriter comme rédacteur de réponse, vous pouvez dupliquer les données de réponse dans le tampon de journal.

Exemple de code :

<code class="go">import (
    "bytes"
    "io"
    "net/http"
)

func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    rsp := io.MultiWriter(w, &log)
    // Use rsp instead of w from this point onward
    // ...
}</code>

Maintenant, le tampon de journal ( log) contiendra une copie des données de réponse écrites à l'auteur de la réponse.

Solution alternative : utilisation de io.TeeReader

Pour capturer les données de la demande, vous pouvez utiliser io.TeeReader. Il crée un lecteur qui écrit tout ce qu'il lit d'un lecteur donné vers un écrivain fourni. Dans ce cas, vous pouvez l'utiliser pour enregistrer une copie du corps de la requête dans le tampon de journal.

Exemple de code :

<code class="go">import (
    "bytes"
    "io"
    "net/http"
)

func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    tee := io.TeeReader(req.Body, &log)
    // Use tee instead of req.Body from this point onward
    // ...
}</code>

Avec io.TeeReader, le tampon de journal inclura une copie du contenu du corps de la requête.

En utilisant ces techniques, vous pouvez enregistrer à la fois les données de requête et de réponse, facilitant ainsi la journalisation complète des requêtes API.

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