You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
loveckiy.ivan 028f734e95 [fix] middleware 3 months ago
.idea init 11 months ago
types add any zap 6 months ago
vendor [fix] middleware 3 months ago
README.md add zap 11 months ago
field.go add zap 11 months ago
field_storage.go add impl logbox 11 months ago
fields.go [fix] middleware 3 months ago
file.go [rev] restruct code 6 months ago
go.mod [fix] middleware 3 months ago
go.sum [fix] middleware 3 months ago
kafka.go [rev] restruct code 6 months ago
level_observer.go add zap 11 months ago
logbox.go [upd] return err 3 months ago
logger.go [rev] restruct code 6 months ago
middleware.go [fix] middleware 3 months ago
options.go add impl logbox 11 months ago
output.go [rev] restruct code 6 months ago
string_casting_json_encoder.go add zap 11 months ago
transport.go add proxing header user id 3 months ago
vfs.go [rev] restruct code 6 months ago
wrapper.go add zap 11 months ago

README.md

Logger

Рекомендуемый logger для всех проектов.

По сути, это просто обертка над go.uber.org/zap с небольшим дополнительным функционалом.

Краткое руководство по использованию

Рекомендуется также ознакомиться с документацией по go.uber.org/zap.

Инициализация

В самом начале main-функции требуется инициализация:

logger.SetupDefaultLogger("my-project-name")

Запись в лог

Примеры:

// Запишет информационное сообщение с дополнительным полем любого типа,
// пытаясь его представить в текстовом виде
logger.Logger(ctx).Info("Some info message", zap.Any("key", someVar))

// Запишет предупреждение с дополнительным JSON-полем,
// в котором автоматически замаскирует "секретные" данные
logger.Logger(ctx).Warn("Some info message", types.JSON("data", someJsonStr))

// Запишет ошибку c URL в дополнительном поле,
// в котором автоматически замаскирует "секретные" данные
logger.Logger(ctx).Error("Some error message", types.URL("url", someUrl))

// Запишет фатальную ошибку и вызовет выход из программы с кодом 1
logger.Logger(ctx).Fatal("Some error message", zap.Error("err", err))

Сохранение Request-ID

Рекомендуется настроить автоматическое добавление в логи поля request-id - ID текущего запроса. Это можно сделать несколькими способами.

Рекомендуемый способ - использовать middleware:

  • для HTTP - HTTPMiddleware, HTTPMiddlewareWithParams (логирование запросов с заданными параметрами)

  • для gRPC - GRPCUnaryServerInterceptor

Но можно и вручную, вызвав функцию SetRequestIDCtx

Также есть функция для получения используемого Request-ID - GetFieldCtx (в случае отсутствия сохраненного в контексте request-id вернет пустую строку)

Добавление своих полей в лог

Можно настроить автоматическое добавление своих полей в лог.

  • SetFieldCtx - добавление своего поля в лог (через контекст)
  • GetFieldCtx - получение ранее сохраненного поля лога (если в контексте нет такого поля, вернется пустая строка)
  • WithFieldsContext - добавление лог полей в context. Все поля добавленные в текущий контекст будут записаны в логи. При записи полей логов в контекст рекомендуется использовать этот метод.

Дополнительные типы полей

Помимо широкого набора типов полей, предоставляемых zap, доступны дополнительные типы полей (пакет types):

  • JSON - строка в формате JSON, в которой автоматически маскируются "секретные" ключи (список ключей - см. в исходном коде)
  • URL - строка с URL, в которой автоматически маскируются "секретные" ключи (список ключей - см. в исходном коде)