```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
找到了:
c.Record()
c.Next()
fmt.Println(string(c.Recorder().Body()))
c.Record() 就会开始记录信息到 recoder 中了,然后在后边直接使用就行了
#7
更多评论
你的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