Логирование: ревью всего кода и рефакторинг в соответствии с конвенциями

This commit is contained in:
av
2026-06-28 20:13:40 +03:00
parent c739a20749
commit 9cfccc7b4a
24 changed files with 473 additions and 203 deletions
+39
View File
@@ -0,0 +1,39 @@
// Package logctx переносит scoped-логдер загрузки через context.Context.
//
// На приёме/реконсиляции загрузки заводим логгер с её ключами
// (download_id [+ infohash], capability) и кладём в ctx; стадии (скачивание →
// распознавание → раскладка → ревью) достают его через From и пишут с уже
// дописанными ключами — без ручного доклеивания download_id в каждый вызов.
package logctx
import (
"context"
"log/slog"
)
type ctxKey struct{}
// With возвращает ctx со вложенным логгером.
func With(ctx context.Context, log *slog.Logger) context.Context {
return context.WithValue(ctx, ctxKey{}, log)
}
// From достаёт логгер из ctx; при отсутствии — slog.Default().
func From(ctx context.Context) *slog.Logger {
return FromOr(ctx, slog.Default())
}
// FromOr достаёт логгер из ctx; при отсутствии — fallback (или slog.Default(),
// если fallback nil). Удобно во внешних клиентах: внутри стадии загрузки вернёт
// scoped-логгер с download_id, при автономном вызове — собственный логгер клиента.
func FromOr(ctx context.Context, fallback *slog.Logger) *slog.Logger {
if ctx != nil {
if log, ok := ctx.Value(ctxKey{}).(*slog.Logger); ok && log != nil {
return log
}
}
if fallback != nil {
return fallback
}
return slog.Default()
}