【发布时间】:2021-06-06 05:46:41
【问题描述】:
前提:我发现了一个类似的问题,但不适用于我的情况,所以请不要将其标记为重复。
我在 Go 中有一个 HTTP 服务器,我创建了一个中间件来记录请求、响应时间,我也想记录响应。
我在log 包下的一个名为HTTPRequest 的函数中使用了httputil.DumpRequest。
如何从w 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)
})
}
【问题讨论】:
-
您的代码面临什么问题?您看到什么错误或其他不良行为?您需要什么帮助?
-
如果不清楚,我会编辑
-
现在清楚一点了。谢谢。你试过什么?
-
我试过这个:stackoverflow.com/questions/43801849/… 和一个 HttpRecorder 但我根本没有找到有效的解决方案。
-
尽你最大的努力更新你的代码,并解释什么不起作用。
标签: go logging middleware