进阶 www.iris-go.com 2026-10-20 02:39:14 · 12 阅读
第55章 Iris框架:响应记录器(Response Recorder)使用指南
响应记录器 Response Recorder
学习如何在 Iris 中记录并修改响应。
基础响应记录
gopackage main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Get("/record", func(ctx iris.Context) {
// 创建记录器
rec := ctx.Recorder()
// 写入响应
rec.Write([]byte("Hello World"))
rec.Writef(" from %s", "Iris")
// 获取已记录的响应体
body := rec.Body()
// 修改响应
modified := strings.ToUpper(string(body))
// 写入最终响应
ctx.WriteString(modified)
})
app.Listen(":8080")
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 使用中间件进行记录 gofunc recordMiddleware(ctx iris.Context) { // 开始记录 rec := ctx.Recorder() // 继续执行下一个处理器 ctx.Next() // 获取已记录的响应 body := rec.Body() status := rec.StatusCode() headers := rec.Headers() // 记录响应日志 ctx.Application().Logger().Infof( "响应: 状态码=%d, 响应体=%s, 头部信息=%v", status, string(body), headers, ) } app.Use(recordMiddleware)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 修改响应 goapp.Get("/modify", func(ctx iris.Context) { rec := ctx.Recorder() // 写入原始响应 ctx.JSON(iris.Map{ "message": "hello world", }) // 获取已记录的响应 var data map[string]interface{} if err := json.Unmarshal(rec.Body(), &data); err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } // 修改响应 data["modified"] = true data["timestamp"] = time.Now() // 写入修改后的响应 ctx.JSON(data) })1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 最佳实践 实现层面: 选择性记录、处理大型响应、监控内存占用、清理资源、错误处理。 性能方面: 合理设置缓冲区、监控使用情况、处理超时、优化记录机制、定期清理。 安全方面: 验证修改操作、监控变更、处理敏感数据、控制访问权限、记录操作日志。 维护方面: 监控使用情况、更新处理器、定期测试、记录变更、审查性能指标。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 使用中间件进行记录 gofunc recordMiddleware(ctx iris.Context) { // 开始记录 rec := ctx.Recorder() // 继续执行下一个处理器 ctx.Next() // 获取已记录的响应 body := rec.Body() status := rec.StatusCode() headers := rec.Headers() // 记录响应日志 ctx.Application().Logger().Infof( "响应: 状态码=%d, 响应体=%s, 头部信息=%v", status, string(body), headers, ) } app.Use(recordMiddleware)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 修改响应 goapp.Get("/modify", func(ctx iris.Context) { rec := ctx.Recorder() // 写入原始响应 ctx.JSON(iris.Map{ "message": "hello world", }) // 获取已记录的响应 var data map[string]interface{} if err := json.Unmarshal(rec.Body(), &data); err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } // 修改响应 data["modified"] = true data["timestamp"] = time.Now() // 写入修改后的响应 ctx.JSON(data) })1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 最佳实践 实现层面: 选择性记录、处理大型响应、监控内存占用、清理资源、错误处理。 性能方面: 合理设置缓冲区、监控使用情况、处理超时、优化记录机制、定期清理。 安全方面: 验证修改操作、监控变更、处理敏感数据、控制访问权限、记录操作日志。 维护方面: 监控使用情况、更新处理器、定期测试、记录变更、审查性能指标。