我正在编写自己的logginMiddleware.基本上,我需要记录请求的主体和响应.我遇到的问题是,当我读到身体时,它会变空,我无法读取它两次.我知道它发生是因为它是ReadCloser类型.有没有办法将身体倒回到开头?
前提:我发现了类似的问题,但不适用于我的情况,所以请不要将其标记为重复。
我在 Go 中有一个 HTTP 服务器,我创建了一个中间件来记录请求、响应时间,我也想记录响应。
我已经在包下httputil.DumpRequest调用的函数中使用了。如何正确获取响应正文、状态和标头并将它们与其他数据一起记录?HTTPRequestlogw http.ResponseWriter
我的问题是:我想拦截响应标头、状态和正文,并将其与请求和响应时间一起记录
这是代码:
log "core/logger"
...
func RequestLoggerMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
defer func() {
log.Info(
fmt.Sprintf(
"[Request: %s] [Execution time: %v] [Response: %s]",
log.HTTPRequest(r),
time.Since(start),
// RESPONSE DATA HERE !!!!!!!
))
}()
next.ServeHTTP(w, r)
})
}
Run Code Online (Sandbox Code Playgroud)