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!