A response recorder is one of the Iris specific http.ResponseWriter. It records the response body, status code and headers that you can manipulate at any handler inside a route's handlers chain.

  1. Call Context.Record() before send data.

  2. The Context.Recorder() returns a ResponseRecorder. Its methods can be used to manipulate or retrieve the response.

The ResponseRecorder type contains the standard Iris ResponseWriter methods plus the following methods.

Body returns the body tracked from the writer so far. Do not use this for edit.

Body() []byte

Use this to clear the body.


Use Write/Writef/WriteString to stream write and SetBody/SetBodyString to set body instead.

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)

Reset headers to their original state, before Context.Record call.


Clear all headers.


Reset resets the response body, headers and the status code header.



Record operation log in global Interceptor.

package main

import ""

func main() {
    app := iris.New()

    // start record.
    app.Use(func(ctx iris.Context) {

    // collect and "log".
    app.Done(func(ctx iris.Context) {
        body := ctx.Recorder().Body()

        // Should print success.
        ctx.Application().Logger().Infof("sent: %s", string(body))

Register the routes...

app.Get("/save", func(ctx iris.Context) {
    ctx.Next() // calls the Done middleware(s).

Or to remove the need of ctx.Next in your main handlers, modify the Iris handlers execution rules as follows.

// It applies per Party and its children,
// therefore, you can create a routes := app.Party("/path")
// and set middlewares, their rules and the routes there as well.
    Done: iris.ExecutionOptions{Force: true},

// [The routes...]
app.Get("/data", func(ctx iris.Context) {

In addition to that, Iris provides a comprehensive API for Transactions. Learn more about it by running an example.

Last updated