Ответ
В Go существует несколько популярных библиотек для логирования, каждая со своими сильными сторонами.
-
log
(стандартная библиотека) Простой и встроенный в Go пакет. Не требует установки зависимостей.- Плюсы: Простота, доступность "из коробки".
- Минусы: Ограниченный функционал: нет уровней логирования (info, debug, error), нет структурированных логов (JSON), низкая производительность.
import "log" log.Printf("Запущена операция с ID: %d", 123)
-
slog
(стандартная библиотека, Go 1.21+) Новый официальный пакет для структурированного логирования, добавленный в Go 1.21.- Плюсы: Встроен в стандартную библиотеку, высокая производительность, поддержка уровней логирования и структурированных логов (JSON, key-value).
- Минусы: Появился относительно недавно.
import "log/slog" slog.Info("Пользователь залогинился", "user_id", 123, "status", "success")
-
logrus
Долгое время был одной из самых популярных библиотек. Полностью совместим с API стандартногоlog
.- Плюсы: Очень гибкий, поддерживает хуки (hooks) для отправки логов во внешние системы (Sentry, Logstash), форматирование (JSON, text), уровни логирования.
- Минусы: Медленнее, чем
zap
илиzerolog
.import "github.com/sirupsen/logrus" logrus.WithFields(logrus.Fields{ "user_id": 123, }).Info("Пользователь обновил профиль")
-
zap
Разработан Uber с упором на максимальную производительность и минимальное выделение памяти.- Плюсы: Очень быстрый, структурированное логирование, есть два режима:
sugared
(более удобный API) и основной (максимально быстрый). - Минусы: API может показаться более сложным, чем у
logrus
.import "go.uber.org/zap" logger, _ := zap.NewProduction() defer logger.Sync() logger.Info("Запрос успешно обработан", zap.String("url", "/api/v1"))
- Плюсы: Очень быстрый, структурированное логирование, есть два режима:
-
zerolog
Еще одна высокопроизводительная библиотека, которая фокусируется на генерации логов в формате JSON с нулевым выделением памяти.- Плюсы: Экстремально быстрый, простой и понятный API, по умолчанию пишет в JSON.
- Минусы: Менее гибкий в плане форматирования и хуков по сравнению с
logrus
.import "github.com/rs/zerolog/log" log.Info().Str("service", "billing").Msg("Платеж обработан")
Как выбрать?
- Простые утилиты и скрипты:
log
. - Новые проекты (Go 1.21+):
slog
— это новый стандарт. - Нужна максимальная гибкость и экосистема (хуки):
logrus
. - Критична высокая производительность (high-load сервисы):
zap
илиzerolog
.