首页 > 后端开发 > Golang > 如何使用 Gorilla Mux 在 Go 中有效记录 HTTP 请求和响应?

如何使用 Gorilla Mux 在 Go 中有效记录 HTTP 请求和响应?

Susan Sarandon
发布: 2024-12-03 00:06:14
原创
316 人浏览过

How Can I Effectively Log Both HTTP Requests and Responses in Go with Gorilla Mux?

使用 Go 和 Gorilla 记录 HTTP 响应

使用 Go 和 Gorilla Web 工具包构建复杂的 Web 应用程序时,记录 HTTP 请求和响应对于调试和分析至关重要。虽然使用 Gorilla 的 LoggingHandler 记录请求很简单,但记录响应却带来了挑战。

记录响应

Eric Broda 提供的解决方案有效地记录了响应,但它并没有将响应发送给客户端。这是一个修改版本,保留了原始代码的功能,同时确保响应到达客户端:

func logHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        x, err := httputil.DumpRequest(r, true)
        if err != nil {
            http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
            return
        }
        log.Println(fmt.Sprintf("%q", x))
        rec := httptest.NewRecorder()
        fn(rec, r)
        log.Println(fmt.Sprintf("%q", rec.Body))        

        // this copies the recorded response to the response writer
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        rec.Body.WriteTo(w)
    }
}
登录后复制

要使用此函数,只需用 logHandler 包装您的处理函数:

http.HandleFunc("/", logHandler(myHandler))
登录后复制

此修改可确保记录请求和响应,同时仍然正确地将响应传递给客户端。

以上是如何使用 Gorilla Mux 在 Go 中有效记录 HTTP 请求和响应?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板