Запись файла приложения
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.