loveckiy.ivan
028f734e95
|
3 months ago | |
---|---|---|
.idea | 11 months ago | |
types | 6 months ago | |
vendor | 3 months ago | |
README.md | 11 months ago | |
field.go | 11 months ago | |
field_storage.go | 11 months ago | |
fields.go | 3 months ago | |
file.go | 6 months ago | |
go.mod | 3 months ago | |
go.sum | 3 months ago | |
kafka.go | 6 months ago | |
level_observer.go | 11 months ago | |
logbox.go | 3 months ago | |
logger.go | 6 months ago | |
middleware.go | 3 months ago | |
options.go | 11 months ago | |
output.go | 6 months ago | |
string_casting_json_encoder.go | 11 months ago | |
transport.go | 3 months ago | |
vfs.go | 6 months ago | |
wrapper.go | 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, в которой автоматически маскируются "секретные" ключи (список ключей - см. в исходном коде)