Gravador de Arquivo de Aplicativo

func main() {
    app := iris.Default()
    // Gravar em um arquivo
    // Desativar automaticamente as cores ao gravar em um arquivo
    f, _ := os.Create("iris.log")
    app.Logger().SetOutput(f)

    // Se precisar gravar logs tanto em um arquivo quanto no console, use o seguinte código
    // app.Logger().AddOutput(os.Stdout)
    
    app.Get("/ping", func(ctx iris.Context) {
        ctx.WriteString("pong")
    })

   app.Listen(":8080")
}

Controlar a Saída Colorida do Log

Por padrão, a saída de log no console será colorida com base no TTY detectado.

Personalize títulos de níveis, texto, cor e estilo em casos regulares.

Importe golog e pio:

import (
    "github.com/kataras/golog"
    "github.com/kataras/pio"
    // [...]
)

Obtenha um nível para personalizar, como DebugLevel:

level := golog.Levels[golog.DebugLevel]

Você tem controle completo sobre o texto, título e estilo do nível:

// Nome do nível
// Nomes em minúsculas serão usados
// para converter a string do nível para o tipo de nível correto
Name string
// AlternativeNames são os nomes com os quais este nível específico pode ser referenciado
// como Name = "warn"
// AlternativeNames = []string{"warning"}, este é um campo opcional,
// então manteremos o Name como uma string simples e criaremos este novo campo.
AlternativeNames []string
// Title é o prefixo do nível de log.
// Também existem `ColorCode` e `Style`.
// `ColorCode` e `Style` devem ser consistentes entre escritores.
Title string
// ColorCode é a cor para `Title`.
ColorCode int
// Style são uma ou mais opções ricas para `Title`.
Style []pio.RichOption

Código de exemplo:

level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // padrão
level.Title = "[DBUG]" // padrão
level.ColorCode = pio.Yellow // padrão

Alterar o formato de saída:

app.Logger().SetFormat("json", "    ")

Registrar um formatador personalizado:

app.Logger().RegisterFormatter(new(myFormatter))

A interface Formatter do golog é a seguinte:

// O Formatter é responsável por imprimir um log em um escritor do logger.
type Formatter interface {
    // O nome do formatador.
    String() string
    // Definir quaisquer opções e retornar um objeto clonado, se comum. Consulte `Logger.SetFormat`.
    Options(opts ...interface{}) Formatter
    // Escreve o "log" no logger "destino".
    Format(dest io.Writer, log *Log) bool
}

Alterar saída e formato por nível:

app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")

Registro de Solicitações

O registro de aplicativo que vimos acima é usado principalmente para registrar informações e erros relacionados à aplicação. Por outro lado, o registro de acesso que vemos abaixo é principalmente utilizado para registrar solicitações e respostas HTTP recebidas.

package main

import (
    "os"

    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/accesslog"
)

// Leia o exemplo e seus comentários com atenção.
func makeAccessLog() *accesslog.AccessLog {
    // Inicializa um novo middleware de registro de acesso.
    ac := accesslog.File("./access.log")
    // Remova esta linha para desativar o registro no console:
    ac.AddOutput(os.Stdout)

    // Configuração padrão:
    ac.Delim = '|'
    ac.TimeFormat = "2006-01-02 15:04:05"
    ac.Async = false
    ac.IP = true
    ac.BytesReceivedBody = true
    ac.BytesSentBody = true
    ac.BytesReceived = false
    ac.BytesSent = false
    ac.BodyMinify = true
    ac.RequestBody = true
    ac.ResponseBody = false
    ac.KeepMultiLineError = true
    ac.PanicLog = accesslog.LogHandler
    
    // Utilize o formato de linha padrão se o formatador estiver ausente:
    // Time|Delay|Status|Method|Path|IP|Path Query Parameters|Received Bytes|Sent Bytes|Request|Response|
    //
    // Defina um formatador personalizado:
    ac.SetFormatter(&accesslog.JSON{
        Indent:    "  ",
        HumanTime: true,
    })
    // ac.SetFormatter(&accesslog.CSV{})
    // ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})
    
    return ac
}

func main() {
    ac := makeAccessLog()
    defer ac.Close() // Feche o arquivo.

    app := iris.New()
    // Registra o middleware (usar UseRouter também pode capturar erros HTTP).
    app.UseRouter(ac.Handler)
    
    app.Get("/", indexHandler)
    
    app.Listen(":8080")
}

func indexHandler(ctx iris.Context) {
    ctx.WriteString("OK")
}

Leia mais exemplos aqui: _examples/logging/request-logger.