package main import ( "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/accesslog" "github.com/kataras/iris/v12/middleware/requestid" ) func main() { /* This example will show you how you can register custom fields and log them separately with a custom format through the Template formatter. */ app := iris.New() ac := accesslog.File("./access.log").AddOutput(app.Logger().Printer) // 1. Register a field. ac.AddFields(func(ctx iris.Context, fields *accesslog.Fields) { fields.Set("Request ID", ctx.GetID()) }) // 2. Use Template formatter's `Text` value // to define a log line format. ac.SetFormatter(&accesslog.Template{ Text: `{{.Now.Format .TimeFormat}} {{.Path}} {{.Code}} {{.IP}} {{.Fields.Get "Request ID" }} `, /* 2020-09-11 09:30:10 / 200 ::1 050a0979-c5e4-4c2b-9f08-cb456628edb1 */ }) // 3. Register the middleware. That's all. app.UseRouter(ac.Handler) // Register the request id middleware, after the logger, this maps the Context.GetID(). // Remember: the accesslog runs the next handlers before itself to provide some fields. app.UseRouter(requestid.New()) app.Get("/", index) app.Listen(":8080") } func index(ctx iris.Context) { ctx.WriteString("Index") } /* Use a custom *template.Template: // 2.1 The log line format: text := `{{.Now.Format .TimeFormat}} {{.Path}} {{.Code}} {{.IP}} {{.Fields.Get "Request ID" }} ` // // 2.2 Parse the template, optionally using custom Template Functions. tmpl := template.Must(template.New("").Funcs(template.FuncMap{ // Custom functions you may want to use inside "text", // e.g. prefixFields .Fields "my_prefix" // to get a slice of fields starts with "my_prefix" // and later, in the template, loop through them and render their values. // "key": func(input) string { return ... } }).Parse(text)) // // 3. Use Template formatter's `Text` value // or the `Tmpl` field to customize the look & feel of a log. ac.SetFormatter(&accesslog.Template{ Tmpl: tmpl, }) */