Пара «zap или zerolog» — классическая дилемма, когда fmt.Println в проде сменился структурными логами: JSON-строки, уровни, поля, корреляция запросов. Оба логгера из топа бенчмарков и обоими гордятся команды, но ежедневная работа с ними ощущается по-разному. zap — это экосистема: ядро zapcore, где энкодеры, выводы и уровни собираются как конструктор, и два API на выбор. zerolog — это одна цепочка вызовов, которая пишется быстрее читается. Здесь разберём оба по одним критериям, покажем одну и ту же запись лога рядом и соберём рекомендацию ползунками под ваши приоритеты.
zap силён там, где логи — часть инфраструктуры. zapcore позволяет собрать произвольный конвейер: JSON для сбора, console для локальной разработки, секция sampling, чтобы под нагрузкой не утонуть в повторах, динамические уровни через AtomicLevel без перезапуска. Отдельный SugaredLogger жертвует частью скорости за удобство: printf-стиль и any-поля. Из этого следует практический вывод: zap выбирают сервисы, у которых логи едут в ELK или Loki и нужна тонкая настройка формата, ротации и уровней по окружениям. Расплата — церемоний больше: конфигурация ядра verbose, а два API в одном коде путают новичков.
zerolog отвечает минимализмом: лог — цепочка .Info().Str("path", p).Int("ms", ms).Msg("done"), JSON собирается без рефлексии и почти без аллокаций. Бинарник не раздувается, конфигурация умещается в три строки, а суб-логгеры с полями (логгер запроса с request_id) создаются на лету. Цена принципиальна: кастомизация скромнее — энкодер один, расширение формата и секции либо не нужны, либо пишутся руками. Комьюнити и число интеграций у zerolog меньше, чем у zap, хотя базовые middleware для популярных фреймворков существуют для обоих.
Как читать итог ниже: оценки — усреднение практики, а не лабораторные цифры; ползунки подставляют ваши приоритеты. В нашем курсе zap разобран полностью: от полей и уровней до zapcore, сэмплинга, динамических уровней и интеграций с gin, gRPC и GORM — этот материал даёт контекст даже для стороннего логгера. Одна и та же запись «запрос обработан» в обеих библиотеках — ниже.