💬Что в себя включает реализация кастомного обработчика логов с log/slog?



🔸Пакет стандартной библиотеки log/slog состоит из двух частей: внешней и внутренней. Внешняя часть реализована типом Logger, собирает структурированную информацию логов, и передает их внутренней части, реализации интерфейса Handler.



🔸Пакет slog поставляется с двумя встроенными обработчиками, которых обычно должно быть достаточно. Но нам может потребоваться написать кастомный обработчик.



📌Для создания кастомного обработчика существует 4 метода:



1️⃣ Enabled: представляет собой оптимизацию, позволяющую избежать ненужной работы. Метод вывода Logger будет вызываться Enabled перед обработкой любого из своих аргументов, чтобы проверить, следует ли продолжать работу.



Enabled(context.Context, Level) bool



2️⃣ Handle: этому методу передается файл Record, содержащий всю информацию, которая должна быть зарегистрирована для одного вызова метода вывода Logger.



Handle(context.Context, Record) error



3️⃣ WithAttrs. Одной из оптимизаций производительности slog является поддержка атрибутов предварительного форматирования. Метод Logger.With преобразует пары ключ-значение в Attrs, а затем вызывает Handler.WithAttrs.



Обработчик может сохранить атрибуты для последующего использования методом Handle или может воспользоваться возможностью отформатировать атрибуты сейчас, один раз, а не делать это повторно при каждом вызове Handle.



WithAttrs(attrs []Attr) Handler



4️⃣ WithGroup: Logger.WithGroup вызывает Handler.WithGroup напрямую, с тем же аргументом, именем группы. Обработчик должен запомнить имя, чтобы использовать его для определения всех последующих атрибутов.



WithGroup(name string) Handler



👉 Подробнее