【发布时间】:2017-10-03 18:03:58
【问题描述】:
我不知道这个问题是否有意义,但我想知道是否有任何方法可以获取写入http.ResponseWriter 的数据。我需要它来记录日志。
我在 Go 中编写了一个 API。
func api1(w http.ResponseWriter, req *http.Request) {
var requestData MyStruct
err := json.NewDecoder(req.Body).Decode(&requestData)
if err != nil {
writeError(w, "JSON request is not in correct format")
return
}
log.Println(" Request Data :", req.Body) // I am logging req
result, err := compute() // getting result from a function
if err != nil {
errRes := ErrorResponse{"ERROR", err}
response, er = json.Marshal(errRes) // getting error response
} else {
response, er = json.Marshal(result)
}
if er != nil {
http.Error(w, er.Error(), 500) // writing error
return
}
io.WriteString(w, string(response)) // writing response
}
目的是创建包含请求和响应数据的单个日志。响应可以是错误响应或已处理响应。
我在想如果我能得到写在 http.ResponseWriter 上的数据,我就可以创建一个有意义的日志。
这可能吗?如果没有,请建议我该如何实现。
【问题讨论】:
-
传递给处理程序的
http.ResponseWriter不支持这一点,但很容易将其包装以支持您的需求。例如,查看这个可能的重复项(它详细说明了包含Request和ResponseWriter):Golang read request body -
icza's 应该是公认的答案。 MultiWriter 生成一个 Writer 而不是 ResponseWriter .. 你需要添加它以使其在处理程序中可互换
标签: go