Запись файла приложения

func main() {
    app := iris.Default()
    // Запись в файл
    // Автоматически отключите цвета при записи в файл
    f, _ := os.Create("iris.log")
    app.Logger().SetOutput(f)

    // Если вам нужно писать логи как в файл, так и в консоль, используйте следующий код
    // app.Logger().AddOutput(os.Stdout)
    
    app.Get("/ping", func(ctx iris.Context) {
        ctx.WriteString("pong")
    })

   app.Listen(":8080")
}

Управление цветом вывода журнала

По умолчанию вывод журнала в консоли будет окрашен в зависимости от обнаруженного TTY.

Настройте заголовки уровня, текст, цвет и стиль в обычных случаях.

Импортируйте golog и pio:

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

Получите уровень для настройки, например DebugLevel:

level := golog.Levels[golog.DebugLevel]

У вас полный контроль над текстом, заголовком и стилем уровня:

// Имя уровня
// Имена в нижнем регистре будут использоваться
// для преобразования строки уровня в правильный тип уровня
Name string
// Альтернативные имена - это имена, с которыми этот конкретный уровень журнала может быть связан,
// такие как Name = "warn"
// AlternativeNames = []string{"warning"}, это опциональное поле,
// поэтому мы оставляем Name простой строкой и создаем это новое поле.
AlternativeNames []string
// Заголовок является префиксом уровня журнала.
// Есть также `ColorCode` и `Style`.
// `ColorCode` и `Style` должны быть согласованы между писателями.
Title string
// ColorCode - цвет для `Title`.
ColorCode int
// Style - одна или несколько богатых опций для `Title`.
Style []pio.RichOption

Пример кода:

level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // по умолчанию
level.Title = "[DBUG]" // по умолчанию
level.ColorCode = pio.Yellow // по умолчанию

Изменение формата вывода:

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

Регистрация пользовательского форматирования:

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

Интерфейс форматирования golog.Formatter следующий:

// Formatter несет ответственность за печать журнала в писателе логгера.
type Formatter interface {
    // Имя форматирования.
    String() string
    // Установите любые параметры и верните клонированный объект, если они общие. См. `Logger.SetFormat`.
    Options(opts ...interface{}) Formatter
    // Форматирует "log" на "dest" логгера.
    Format(dest io.Writer, log *Log) bool
}

Изменение вывода и формата по уровню:

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

Логирование запросов

Логгер приложения, который мы видели выше, в основном используется для регистрации информации и ошибок, связанных с приложением. С другой стороны, регистр доступа ниже используется в основном для регистрации входящих HTTP-запросов и ответов.

package main

import (
    "os"

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

// Внимательно прочитайте пример и его комментарии.
func makeAccessLog() *accesslog.AccessLog {
    // Инициализировать новое промежуточное ПО для журнала доступа.
    ac := accesslog.File("./access.log")
    // Удалите эту строку, чтобы отключить регистрацию в консоль:
    ac.AddOutput(os.Stdout)

    // Конфигурация по умолчанию:
    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
    
    // Использовать формат по умолчанию, если отсутствует форматер:
    // Время|Задержка|Статус|Метод|Путь|IP|Параметры запроса пути|Принятые байты|Отправленные байты|Запрос|Ответ|
    //
    // Установить пользовательский форматер:
    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() // Закрыть файл.

    app := iris.New()
    // Зарегистрировать промежуточное ПО (использование UseRouter также может обрабатывать ошибки HTTP).
    app.UseRouter(ac.Handler)
    
    app.Get("/", indexHandler)
    
    app.Listen(":8080")
}

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

Больше примеров здесь: _examples/logging/request-logger.