记录 HTTP ResponseWriter 数据
在 Go 中,同时记录请求和响应数据可能具有挑战性。要解决这个问题,请考虑使用 io.MultiWriter,它将所有写入复制到多个写入器。
<code class="go">func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // From this point onward, use rsp instead of w ... }</code>
通过此设置,rsp 会将写入复制到 w(响应写入器)和日志缓冲区。然后可以捕获日志缓冲区的内容以用于记录目的。
另一个选项是利用 io.TeeReader 复制请求正文中的读取。这确保了请求有效负载也被记录。
<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>
在这种情况下,json.Decoder 从 tee 读取,有效地将请求正文复制到日志缓冲区中。
通过实现这些技术,您可以编写有意义的日志来捕获请求和响应数据,为故障排除和调试目的提供有价值的信息。
以上是如何在 Go 中记录请求和响应数据?的详细内容。更多信息请关注PHP中文网其他相关文章!