💬Что в себя включает реализация кастомного обработчика логов с log/slog?
🔸Пакет стандартной библиотеки
🔸Пакет
📌Для создания кастомного обработчика существует 4 метода:
1️⃣ Enabled: представляет собой оптимизацию, позволяющую избежать ненужной работы. Метод вывода
2️⃣ Handle: этому методу передается файл
3️⃣ WithAttrs. Одной из оптимизаций производительности
Обработчик может сохранить атрибуты для последующего использования методом
4️⃣ WithGroup:
👉 Подробнее
🔸Пакет стандартной библиотеки
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
👉 Подробнее