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.

3.9 KiB

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, в которой автоматически маскируются "секретные" ключи (список ключей - см. в исходном коде)