Журнал 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.