Логгер
Промежуточное ПО для Fiber, которое используется для регистрации подробной информации о HTTP-запросах и ответах.
Интерфейс
func New(config ...Config) fiber.Handler
Пример
Импортируйте пакет middleware Framework веб-приложения Fiber:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
Примечание: Порядок регистрации критичен. Логирование будет происходить только для маршрутов, зарегистрированных после данного промежуточного ПО. Поэтому это промежуточное ПО должно быть одним из первых, зарегистрированных.
После инициализации приложения Fiber можно зарегистрировать промежуточное ПО следующими способами:
// Инициализация с настройками по умолчанию
app.Use(logger.New())
// Или настроить конфигурацию
// Зарегистрировать удаленный IP и порт
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// Зарегистрировать ID запроса
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
// Для получения дополнительных вариантов см. раздел Config
Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))
// Изменить часовой пояс и формат времени
app.Use(logger.New(logger.Config{
Format: "${pid} ${status} - ${method} ${path}\n",
TimeFormat: "02-Jan-2006",
TimeZone: "America/New_York",
}))
// Пользовательский файловый писатель
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Ошибка открытия файла: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
Output: file,
}))
// Добавить пользовательский тег
app.Use(logger.New(logger.Config{
CustomTags: map[string]logger.LogFunc{
"custom_tag": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
return output.WriteString("Это пользовательский тег")
},
},
}))
// Функция обратного вызова после регистрации
app.Use(logger.New(logger.Config{
TimeFormat: time.RFC3339Nano,
TimeZone: "Asia/Shanghai",
Done: func(c *fiber.Ctx, logString []byte) {
if c.Response().StatusCode() != fiber.StatusOK {
reporter.SendToSlack(logString)
}
},
}))
// Отключить цвета при выводе в формате по умолчанию
app.Use(logger.New(logger.Config{
DisableColors: true,
}))
Настройки
Свойство | Тип | Описание | Значение по умолчанию |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next определяет функцию, которая пропускает промежуточное ПО, когда возвращает true. | nil |
Done | func(*fiber.Ctx, []byte) |
Done - функция, которая вызывается после записи строки журнала запроса в Output, строка журнала передается в качестве параметра. | nil |
CustomTags | map[string]LogFunc |
tagFunctions определяет пользовательские операции тегов. | map[string]LogFunc |
Format | string |
Format определяет теги журнала. | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
TimeFormat определяет формат времени отметки времени журнала. | 15:04:05 |
TimeZone | string |
TimeZone можно указать как "UTC", "America/New_York", "Asia/Chongqing", и т. д. | "Local" |
TimeInterval | time.Duration |
TimeInterval - время задержки перед обновлением отметки времени. | 500 * time.Millisecond |
Output | io.Writer |
Output - это писатель, используемый для записи журналов. | os.Stdout |
DisableColors | bool |
DisableColors определяет, должен ли вывод журнала быть окрашенным. | false |
enableColors | bool |
Внутреннее поле для включения цветов в выводе журнала. (Это не настраиваемое поле) | - |
enableLatency | bool |
Внутреннее поле для включения измерения задержки в журналах. (Это не настраиваемое поле) | - |
timeZoneLocation | *time.Location |
Внутреннее поле для местоположения часового пояса. (Это не настраиваемое поле) | - |
Конфигурация по умолчанию
var ConfigDefault = Config{
Next: nil,
Done: nil,
Format: "[${время}] ${статус} - ${задержка} ${метод} ${путь}\n",
TimeFormat: "15:04:05",
TimeZone: "Локальное",
TimeInterval: 500 * time.Millisecond,
Output: os.Stdout,
DisableColors: false,
}
Константы
// Переменные логгера
const (
TagPid = "pid" // Идентификатор процесса
TagTime = "time" // Время
TagReferer = "referer" // Реферер
TagProtocol = "protocol" // Протокол
TagPort = "port" // Порт
TagIP = "ip" // IP-адрес
TagIPs = "ips" // IP-адреса
TagHost = "host" // Хост
TagMethod = "method" // Метод запроса
TagPath = "path" // Путь
TagURL = "url" // URL
TagUA = "ua" // User Agent
TagLatency = "latency" // Задержка
TagStatus = "status" // Статус ответа
TagResBody = "resBody" // Тело ответа
TagReqHeaders = "reqHeaders" // Заголовки запроса
TagQueryStringParams = "queryParams" // Параметры запроса
TagBody = "body" // Тело запроса
TagBytesSent = "bytesSent" // Отправленные байты
TagBytesReceived = "bytesReceived" // Полученные байты
TagRoute = "route" // Маршрут
TagError = "error" // Ошибка
// Устаревшее: используйте TagReqHeader вместо
TagHeader = "header:" // Заголовок запроса
TagReqHeader = "reqHeader:" // Заголовок запроса
TagRespHeader = "respHeader:" // Заголовок ответа
TagQuery = "query:" // Запрос
TagForm = "form:" // Форма
TagCookie = "cookie:" // Cookie
TagLocals = "locals:" // Локальные переменные
// Цвета
TagBlack = "black" // Чёрный
TagRed = "red" // Красный
TagGreen = "green" // Зелёный
TagYellow = "yellow" // Жёлтый
TagBlue = "blue" // Синий
TagMagenta = "magenta" // Пурпурный
TagCyan = "cyan" // Голубой
TagWhite = "white" // Белый
TagReset = "reset" // Сброс цвета
)