Логгер

Промежуточное ПО для 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"             	// Сброс цвета
)