GolangLessons/url-shortener

Повторное добавление атрибутов в регистратор

Closed this issue · 1 comments

Обработчики используют конструкцию:

log = log.With(
slog.String("op", op),
slog.String("request_id", middleware.GetReqID(r.Context())),
)

Несмотря на то, что log является локальной для функции конструктора обработчика, она внешняя по отношению к самому обработчику и сохраняет состояние между вызовами обработчика. В результате атрибуты будут повторно добавляться в регистратор при каждом вызове обработчика.

Визуально проявление проблемы можно наблюдать, если для режима local вместо PrettySlog использовать стандартный TextHandler. При каждом обращении к серверу размер строк журнала будут расти из-за повтора атрибутов.

Для решения проблемы достаточно сделать переменную log локальной, используя :=
log := log.With(...)

Смержил PR, спасибо большое за помощь