- internal/logging: LOG_LEVEL/LOG_FORMAT parsing and slog handler - request_id middleware (X-Request-ID or generated, echoed) + debug access log - httpx registers errors; middleware logs internal causes with request_id - health excluded, objects/sse debug-only, no query/body/secrets in logs - new observability capability spec; README/.env.example docs
2.8 KiB
2.8 KiB
Proposal
Why
Диагностика инцидентов идёт вслепую: логов операций нет ни на каком уровне,
access-логов нет, а внутренние ошибки (не-AppError) отдаются клиенту как
generic 500 и нигде не логируются — таких мест 82. Уровень логов зашит
(slog.LevelInfo, main.go:34), переключателя нет. Нужны управляемая детализация,
след каждого запроса и регистрация причин внутренних ошибок.
What Changes
- Конфигурация логирования:
LOG_LEVEL(debug|info|warn|error, по умолчаниюinfo) иLOG_FORMAT(json|text, по умолчаниюjson);main.goстроитslog-handler из конфига вместо жёсткогоLevelInfo. - Gin-middleware:
request_id(из заголовкаX-Request-IDлибо сгенерированный) кладётся в контекст запроса; access-лог уровняdebugс полями method, route, status, latency, bytes, client_ip, user_id, request_id. - Регистрация внутренних ошибок: не-
AppErrorизhttpx.RespondError/Abortстановятся регистрируемыми и пишутся на уровнеerrorсrequest_idи причиной; отказы 4xx — на уровнеdebug. - Приватность: не логируются query-строка (
?token=), подписанные URL и тела запросов;/api/healthисключён всегда,/api/objects/*и/api/sse/*— толькоdebug. - CLI-команды (
migrate,reconcile,backfill-exif) не меняются.
Capabilities
New Capabilities
observability: конфигурируемое структурированное логирование сервера — уровень и формат вывода, access-лог запросов с корреляцией и регистрация причин внутренних ошибок.
Modified Capabilities
Impact
backend/internal/config(секцияLog+ env),backend/cmd/server/main.go(сборка handler из конфига).backend/internal/app(middleware логирования),backend/internal/httpx(регистрация внутренних ошибок)..env.example,README.md.- API, схема БД и хранилище не меняются. При дефолтном
LOG_LEVEL=infoобъём обычных логов почти не растёт: access-строки и 4xx остаются на уровнеdebug.