使用自定义Interceptor来将web服务的输入输出写入日志?

radrupt · · 797 次点击
func Interceptor(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _w := &YourResponseWriter{ w:w, r:r, } h.ServeHTTP(_w, r) }) } YourResponseWriter实现http.ResponseWriter interface,在里面加入你需要的功能
#2
更多评论
我的结论是如果要记录消耗时间,使用interceptor这种方案是无效的。 目前的做法是只记录请求数据和相应数据,请求消耗的时间不做记录。 即在w.write所在的方法里打印log。 func success(w http.ResponseWriter, r *http.Request, message string, data interface{}) { w.Header().Set("content-type","application/json") w.WriteHeader(http.StatusOK) output := make(map[string]interface{}) output["result"] = true output["message"] = message output["data"] = data outputJson, _ := json.Marshal(output) w.Write(outputJson) logReqAndRes(output,r) }
#1