Maison >développement back-end >Golang >Comment puis-je enregistrer les données de requête et de réponse dans mon API HTTP ?

Comment puis-je enregistrer les données de requête et de réponse dans mon API HTTP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 18:04:02935parcourir

How Can I Log Both Request and Response Data in My HTTP API?

Consignation des données de réponse HTTP pour une journalisation complète

Un défi courant dans la journalisation consiste à capturer à la fois les données de demande et de réponse dans un seul journal. Par défaut, le contenu du flux http.ResponseWriter n'est pas accessible, ce qui rend difficile l'extraction de la réponse à des fins de journalisation. Cependant, il existe des moyens d'obtenir cette capacité.

Une approche consiste à utiliser l'utilitaire io.MultiWriter. En créant un rédacteur qui duplique ses écritures vers plusieurs destinations, nous pouvons enregistrer la réponse et l'envoyer au client simultanément :

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    rsp := io.MultiWriter(w, &log)

    // Perform operations and write to 'rsp'

    // Now, 'log' contains a duplicate of the response data sent to the client.
}</code>

Une autre option consiste à utiliser io.TeeReader pour créer un lecteur qui écrit sur un écrivain spécifié. Cela nous permet de créer une copie du flux req.Body et de l'enregistrer dans le tampon de journal :

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    tee := io.TeeReader(req.Body, &log)

    // Perform operations using tee as the 'body'

    // Now, 'log' contains a copy of the request body data.
}</code>

Ces techniques vous permettent de capturer à la fois les données de demande et de réponse dans vos journaux, offrant ainsi une vue complète de l'activité de votre 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