Развилка «slog или zerolog» возникает в проектах, которые хотят структурные логи, но не тянут тяжёлую конфигурацию: небольшое API, CLI-утилита, воркер в фоне. Оба варианта обещают JSON-строки с полями и минимум церемоний, но подходят с разных сторон. slog появился в стандартной библиотеке с Go 1.21: атрибуты, уровни, группы и хендлеры — без единой внешней зависимости. zerolog живёт в стороннем модуле и десятилетие держит звание самого дешёвого по аллокациям логгера Go. На этой странице сравним их по одним критериям, покажем одну и ту же запись рядом и соберём персональную рекомендацию ползунками под ваши приоритеты.
slog ставит на интерфейс и будущее экосистемы. Запись выглядит как slog.Info("request finished", "path", p, "ms", ms), а чаще — с предвычисленными атрибутами slog.String и slog.Int, которые не боксируются в any. Главный аргумент — контракт: раз логгер живёт в stdlib, сторонние библиотеки принимают *slog.Logger вместо своих типов, контекстные значения прикрепляются через slog.With, а движок подменяется хендлером — сегодня это TextHandler или JSONHandler, завтра любой сторонний. Расплата — производительность: дефолтные хендлеры заметно аллоцируют, JSON-формат скромнее в деталях, а всего изящества церемоний хватило бы и zerolog-у.
zerolog отвечает минимальной ценой записи: лог — цепочка logger.Info().Str("path", p).Int("ms", ms).Msg("done"), JSON собирается руками в байтовый буфер без рефлексии и без аллокаций на горячем пути. Суб-логгеры с полями создаются через With(), конфигурация умещается в три строки, бинарник не раздувается. Расплата — зависимость и интерфейс: zerolog — сторонний модуль в go.mod со своей цепочной лексикой, а для стыковки с библиотеками, которые ждут *slog.Logger, понадобится адаптер hlog или обёртка. Кастомизация формата скромнее: энкодер один, и расширения пишутся руками.
Как читать итог ниже: оценки — усреднение практики команды проекта, а не лабораторные замеры; ползунки подставляют ваши приоритеты. Грубая граница: библиотека, CLI или сервис, где важен ноль зависимостей и совместимость с экосистемой — slog; горячий JSON-конвейер под нагрузкой, где каждая аллокация на счету — zerolog. Если проект уже вырос до тонкой настройки конвейера — посмотрите сравнения zap со slog и zap с zerolog: там разобран третий путь с zapcore-конструктором.