Ответ
В Go существует несколько подходов к логированию, от встроенных в стандартную библиотеку до высокопроизводительных сторонних решений.
1. Стандартная библиотека
-
log
: Простой пакет, подходящий для небольших утилит или примеров.- Плюсы: Не требует зависимостей.
- Минусы: Отсутствие уровней логирования (Info, Debug, Error), нет поддержки структурированного вывода (например, JSON), низкая производительность по сравнению с аналогами.
-
slog
(новинка в Go 1.21): Новый пакет в стандартной библиотеке для структурированного логирования.- Плюсы: Стандартизированный подход, поддержка уровней, вывод в JSON или текстовом формате, хорошая производительность.
- Цель: Стать общим стандартом для логирования в экосистеме Go.
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) logger.Info("User logged in", "user_id", 123, "status", "success")
2. Популярные сторонние библиотеки
-
zap
(от Uber): Де-факто стандарт для высокопроизводительных приложений.- Плюсы: Очень высокая скорость и низкое потребление памяти. Строго структурированное логирование. Есть два режима:
Production
(максимальная производительность) иDevelopment
(удобный для чтения вывод). - Минусы: API может показаться более многословным.
logger, _ := zap.NewProduction() defer logger.Sync() // Важно для сброса буфера logger.Info("Failed to process request", zap.String("url", "/api/v1/users"), zap.Int("attempt", 3), )
- Плюсы: Очень высокая скорость и низкое потребление памяти. Строго структурированное логирование. Есть два режима:
-
logrus
: Одна из самых старых и популярных библиотек.- Плюсы: Очень гибкий API с хуками (hooks), которые позволяют отправлять логи в разные системы (Sentry, Logstash). Удобный для чтения вывод по умолчанию.
- Минусы: В настоящее время находится в режиме поддержки (maintenance mode). Значительно медленнее, чем
zap
.
Какой выбрать?
- Для новых проектов (Go 1.21+): Начинать с
slog
. Это новый стандарт, он мощный и не требует внешних зависимостей. - Для высоконагруженных систем (high-performance):
zap
остается лучшим выбором из-за его непревзойденной производительности. - Для простых скриптов: Достаточно стандартного
log
. - Для легаси-проектов: Если
logrus
уже используется, можно продолжать его поддерживать, но для новых сервисов лучше выбратьslog
илиzap
.