```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
这个主要是我们app端开发和我们没在一起,调试时接口有问题,他们那边无法给准确的请求和返回,
我们这边就要复现这个问题,会麻烦一点。之前的日志中也无法打印出详细的请求响应情况,所以加个这个中间件。
#6
更多评论
你的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