How Can I Log Both Request and Response Data in My HTTP API?
Nov 05, 2024 pm 06:04 PMLogging 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!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Go language pack import: What is the difference between underscore and without underscore?

How to implement short-term information transfer between pages in the Beego framework?

How do I write mock objects and stubs for testing in Go?

How to convert MySQL query result List into a custom structure slice in Go language?

How can I define custom type constraints for generics in Go?

How can I use tracing tools to understand the execution flow of my Go applications?

How to write files in Go language conveniently?
