3.0 KiB
3.0 KiB
Миграция 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.Logger — abstractlogger требует zap. Нужно либо оставить zap только здесь, либо заменить abstractlogger на slog-совместимый аналог |
Высокая |
| 36 | api-gateway/cmd/http/main.go |
klog.InitLogger() возвращает *zap.Logger сейчас, после миграции вернёт *slog.Logger — нужно отвязать инициализацию zap от klog |
Средняя |
| Сервис | Готовность | Пролит |
|---|---|---|
| accounting | + | |
| async | ||
| document | ||
| education | + | |
| file-manager | + | |
| hr | + | |
| mailer | ||
| partner | + | |
| pilot | + | + |
| private | ||
| public | ||
| rubytech | + | |
| store | + | |
| unisender | ||
| user | + | |
| yandex | + | |
| api-gateway | ||
| mq-tools | ||
| tools | + | + |