Журнал Fiber

Мы можем использовать журналы для наблюдения за поведением программы, диагностики проблем или настройки соответствующих оповещений. Определение хорошо структурированного журнала может улучшить эффективность поиска и облегчить обработку проблем.

Fiber предоставляет способ по умолчанию для вывода журналов на стандартный вывод. Он также предоставляет несколько глобальных функций, таких как log.Info, log.Errorf и log.Warnw.

Уровни журнала

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

Пользовательский журнал

Fiber предоставляет интерфейс AllLogger для адаптации к различным библиотекам регистрации.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

Вывод журналов

Примечание: Вызов методов на уровне Fatal прерывает выполнение программы после вывода журнала. Пожалуйста, используйте осторожно. Прямой вывод журналов на различных уровнях будет введен в messageKey и по умолчанию установлен в msg.

log.Info("Привет, мир!")
log.Debug("Ты в порядке?")
log.Info("42 - ответ на вопрос о жизни, вселенной и всем")
log.Warn("Нас атакуют!")
log.Error("Хьюстон, у нас проблема.")
log.Fatal("Прощай, и спасибо за все рыбы.")
log.Panic("Система упала.")

Форматирование и вывод журналов на различных уровнях, все методы заканчиваются на f.

log.Debugf("Привет, %s", "мальчик")
log.Infof("%d - ответ на вопрос о жизни, вселенной и всем", 233)
log.Warnf("Нас атакуют, %s!", "начальник")
log.Errorf("%s, у нас проблема.", "Мастер Шифу")
log.Fatalf("Прощай, и спасибо за все, %s.", "банан")

Вывод сообщений с ключами и значениями. Если ключи и значения не сопоставлены, будет выведено KEYVALS UNPAIRED.

log.Debugw("", "Привет", "мальчик")
log.Infow("", "число", 233)
log.Warnw("", "работа", "босс")
log.Errorw("", "имя", "Мастер Шифу")
log.Fatalw("", "фрукт", "банан")

Глобальный журнал

Если вам нужно использовать простую функцию журналирования в проекте и выводить ее глобально в любое время, мы предоставляем глобальный журнал.

import "github.com/gofiber/fiber/v2/log"

log.Info("информация")
log.Warn("предупреждение")

В вышеприведенном коде используется log.DefaultLogger по умолчанию для стандартного вывода. Вы также можете найти адаптеры, уже реализованные в папке contrib, или использовать свою собственную реализацию Logger и установить глобальный регистратор с помощью log.SetLogger.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Вставьте пользовательский регистратор
fiberlog.SetLogger(customLogger)

Установка уровня

log.SetLevel устанавливает уровень журналов, которые ниже этого уровня, и не будут выводиться. Регистратор по умолчанию установлен на LevelTrace.

Пожалуйста, обратите внимание, что этот метод не является безопасным для конкурентного выполнения.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

Установка вывода

log.SetOutput устанавливает место назначения вывода для регистрации. По умолчанию регистратор выводит журналы в консоль.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

Установите место назначения вывода в файл.

// Вывод в файл test.log
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

Установите место назначения вывода как в консоль, так и в файл.

// Вывод в файл test.log
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

Привязать контекст

Установите контекст и используйте следующий метод, чтобы вернуть экземпляр CommonLogger, привязанный к указанному контексту.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

Примечание: это стандартная библиотека логирования для фреймворка Fiber. Конечно, вы можете выбрать другие известные открытые библиотеки логирования для Go.