Logging HTTP Response Data for Comprehensive Logging
A common challenge in logging is capturing both request and response data in a single log. By default, the content of the http.ResponseWriter stream is not accessible, making it difficult to extract the response for logging purposes. However, there are ways to achieve this capability.
One approach is to utilize the io.MultiWriter utility. By creating a writer that duplicates its writes to multiple destinations, we can log the response and send it to the client simultaneously:
<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>
Another option is to employ io.TeeReader to create a reader that writes to a specified writer. This allows us to create a copy of the req.Body stream and record it in the log buffer:
<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>
These techniques enable you to capture both request and response data in your logs, providing a comprehensive view of your API's activity.
The above is the detailed content of How Can I Log Both Request and Response Data in My HTTP API?. For more information, please follow other related articles on the PHP Chinese website!