Home > Article > Backend Development > How to Effectively Log HTTP Request and Response Data in Go APIs?
Logging HTTP Request and Response Data
When developing web APIs in Go, logging both the incoming HTTP request and the outgoing HTTP response is crucial for monitoring and debugging. However, the default http.ResponseWriter interface does not provide a convenient way to capture the response data after it has been written.
Capturing Response Data Using io.MultiWriter
One solution is to use the io.MultiWriter function to create a writer that duplicates its writes to multiple destinations. This allows you to log the response while still sending it to the client.
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // Subsequent writes to rsp will be duplicated to both w and log ... }</code>
Capturing Request Data Using io.TeeReader
To capture the incoming HTTP request body for logging, you can use the io.TeeReader function to create a reader that reads from the original request body while also writing to a separate buffer.
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer tee := io.TeeReader(req.Body, &log) err := json.NewDecoder(tee).Decode(&requestData) ... }</code>
Combining Request and Response Data for Logging
With both the request and response data captured in their respective buffers, you can now combine them into a single log message.
<code class="go">// Assuming we have set up log to be a logger with desired format and output log.Printf("%s %s %d %s %s", req.Method, req.URL.Path, req.Proto, log.BufioReader, log.Bytes())</code>
By combining these techniques, you can effectively capture and log both the incoming HTTP request and outgoing HTTP response data, providing valuable insights for troubleshooting and monitoring your API.
The above is the detailed content of How to Effectively Log HTTP Request and Response Data in Go APIs?. For more information, please follow other related articles on the PHP Chinese website!