Home >Backend Development >Golang >How Can I Log Both Request and Response Data in My HTTP API?

How Can I Log Both Request and Response Data in My HTTP API?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 18:04:02935browse

How Can I Log Both Request and Response Data in My HTTP API?

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!

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