Home  >  Article  >  Backend Development  >  How to Effectively Log HTTP Request and Response Data in Go APIs?

How to Effectively Log HTTP Request and Response Data in Go APIs?

DDD
DDDOriginal
2024-11-06 01:48:02725browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn