Files
obsidian/Работа/Замена zap на slog.md

2.6 KiB
Raw Blame History

Миграция klog/zap → slog

Контекст

tools/klog — тонкая обёртка над go.uber.org/zap, которая является точкой входа для логирования во всех сервисах. Модуль: gitlab.adsw.io/platform/tools/v3, потребляется 15+ репозиториями через vendor.

Текущий формат логов (сохраняется)

{"level":"info","caller":"main.go:42","msg":"starting service","source":"accounting","date":"2026-05-08T12:34:56.789+03:00"}
{"level":"error","caller":"auth.go:28","msg":"fetching user profile","source":"accounting","date":"2026-05-08T12:34:56.789+03:00","error":"context deadline exceeded"}

Поля: level (строчными), caller, msg, source (при init), date (ISO 8601 в каждом вызове через cookFields()).

Формат воспроизводится через log/slog с кастомным JSON handler'ом + ReplaceAttr для приведения уровней к нижнему регистру.


Шаг 3 — api-gateway (отдельно, не блокирует остальное)

api-gateway держит *zap.Logger как поле структуры Application и передаёт его в log.NewZapLogger() из библиотеки jensneuse/abstractlogger. Это независимо от klog и не блокирует миграцию остальных сервисов.

# Файл Проблема Сложность
35 api-gateway/pkg/application/application.go Поле ZapLogger *zap.Loggerabstractlogger требует zap. Нужно либо оставить zap только здесь, либо заменить abstractlogger на slog-совместимый аналог Высокая
36 api-gateway/cmd/http/main.go klog.InitLogger() возвращает *zap.Logger сейчас, после миграции вернёт *slog.Logger — нужно отвязать инициализацию zap от klog Средняя

Сервис Готовность Пролит
async
document
education +
file-manager +
mailer
private
public
store +
unisender
api-gateway
mq-tools