分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
目前能做到打印request以及消耗时间,但是无法打印response数据,需要一个解决方法获取reponse里的statusCode和body。
func logReqAndRes(start time.Time, requestData []byte, w http.ResponseWriter, r *http.Request) {
t := time.Now()
elapsed := t.Sub(start)
requestDataArray := strings.Split(string(requestData),"\r\n")
body, _ := url.QueryUnescape(requestDataArray[len(requestDataArray)-1])
log.WithFields(log.Fields{
"request.Url":r.URL.Path,
"request.Query":r.URL.RawQuery,
"request.Host":r.Host,
"request.Method":r.Method,
"request.Header":r.Header,
"request.Body": body,
"duration(ms)": float64(elapsed)/1000000.0,
}).Info("request")
// 但是无法通过w获取response的数据
fmt.Println(w)//这个打印的数据并不是我需要的
}
func Interceptor(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
dumpRequest, _ := httputil.DumpRequest(r, true)
h.ServeHTTP(w, r)
logReqAndRes(start,dumpRequest,w,r)
})
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1274 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传