```go
var once sync.Once
var f *os.File
var err error
func DebugLogger(c iris.Context) {
once.Do(func() {
f, err = os.Create("debug.log")
if err != nil {
log.App().Error("DebugLogger error:", zap.Error(err))
}
})
if f == nil {
log.App().Error("debug.log not exists")
c.Next()
return
}
requestDump, err := httputil.DumpRequest(c.Request(), true)
if err != nil {
log.App().Error("logger error:", zap.Error(err))
}
c.Next()
fmt.Fprintln(f, string(requestDump))
fmt.Println(c.Request().Response)
responseDump, err := httputil.DumpResponse(c.Request().Response, true)
if err != nil {
fmt.Println(err)
}
fmt.Fprintln(f, string(responseDump))
}
```
发现 (c.Request().Response 为 nil,如何才能获取到 reposne
我去查了一下,
找到一个方法在返回前获取response
https://pkg.golangclub.com/github.com/kataras/iris/context?tab=doc
这里有个例子.
重点是设置SetBeforeFlush, 插入一个锚点, 然后再这里应该能获取到Recorder的body就是你想要的.
我也在用iris. 其实大多数情况下你这个需求是不需要考虑的.
#5
更多评论
你的c.Request().Response是http.Request结构里的Response成员,是客户端重定向时自己填入重定向的源请求。
服务器接受到的请求上下文里不会写信息到这里,不知道你这个中间件的意图是想做什么。
```go
type Request struct {
...
// Response is the redirect response which caused this request
// to be created. This field is only populated during client
// redirects.
Response *Response // Go 1.7
}
```
#2