响应记录器是一个 Iris 的特定 `http.ResponseWriter` ,它记录发送的正文, 状态代码和标头,你可以在路由的请求处理程序链中的任何处理程序上进行操作。
1. 在发送数据之前调用 `Context.Record()` 。
2. `Context.Recorder()` 返回一个 [ResponseRecorder](https://godoc.org/github.com/kataras/iris/context#ResponseRecorder). 其方法可用于操纵或检索响应。
`ResponseRecorder` 类型包含标准 Iris 的 ResponseWriter 方法以及以下方法。
Body **返回**记录器记录到目前为止的正文。 请勿用于编辑。
```Body() []byte```
用它清除正文。
```ResetBody()```
使用 `Write/Writef/WriteString` 进行流写入, 并使用 SetBody/SetBodyString 设置正文。
```
Write(contents []byte) (int, error)
Writef(format string, a ...interface{}) (n int, err error)
WriteString(s string) (n int, err error)
SetBody(b []byte)
SetBodyString(s string)
```
将标头重置为其原始状态,在 Context.Record 调用之前。
```ResetHeaders()```
清除所有标头
```ClearHeaders()```
Reset 将重置响应主体,标头和状态代码标头。
```Reset()```
## 示例
在全局拦截器中记录操作日志。
```
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
// 开始记录。
app.Use(func(ctx iris.Context) {
ctx.Record()
ctx.Next()
})
// 收集并“记录”。
app.Done(func(ctx iris.Context) {
body := ctx.Recorder().Body()
// 应该打印成功。
app.Logger().Infof("sent: %s", string(body))
})
}
```
注册路由...
```
app.Get("/save", func(ctx iris.Context) {
ctx.WriteString("success")
ctx.Next() // calls the Done middleware(s).
})
```
或去除在你的主要处理程序中 `ctx.Next` 所需要的, 请修改 Iris 的处理程序[执行规则](https://github.com/kataras/iris/blob/master/_examples/mvc/middleware/without-ctx-next/main.go),如下所示。
```
// 它适用于每个分组和它的子分组,
// 因此, 你可以创建一条路由 := app.Party("/path")
// 并设置中间件, 它们的规则以及那里的路由。
app.SetExecutionRules(iris.ExecutionRules{
Done: iris.ExecutionOptions{Force: true},
})
// [路由...]
app.Get("/save", func(ctx iris.Context) {
ctx.WriteString("success")
})
```
除此之外, Iris 还为**事务**提供了一个全面的 API 。通过运行[例子](https://github.com/kataras/iris/blob/master/_examples/http_responsewriter/transactions/main.go)进一步了解它。