Skip to content

Логирование

Что делал на практике

  • настраивал прикладное логирование для backend-сервисов и API;
  • разделял каналы логирования по назначению;
  • вводил структурированный контекст в логах;
  • настраивал ротацию и сроки хранения логов;
  • добавлял корреляционные идентификаторы запросов (trace_id);
  • проектировал логирование фоновых задач и служебных процессов;
  • подключал инструменты локальной отладки и централизованного сбора логов.

Прикладное логирование API

Для API настраивал отдельный лог-канал и middleware, которое централизованно фиксирует:

  • начало и завершение запроса;
  • HTTP-метод, маршрут, статус ответа;
  • длительность выполнения;
  • контекст пользователя;
  • ошибки и исключения;
  • служебный request context для поиска инцидентов.

Trace ID и корреляция событий

Использовал trace_id для связки:

  • входящего HTTP-запроса;
  • логов middleware, контроллеров и exception handling;
  • фоновых и асинхронных операций, если они продолжают пользовательский сценарий.

trace_id добавлялся в лог-контекст и возвращался клиенту в HTTP-ответе.

Разделение лог-каналов

Разделял логирование по каналам, чтобы разные типы событий не смешивались в один поток:

  • отдельный канал для API;
  • отдельные каналы для HTTP/служебного трафика;
  • отдельные каналы для очередей и фоновых задач;
  • отдельные каналы для специализированных процессов, например генерации файлов или экспорта.

На практике это видно по наличию отдельных daily-каналов для api, http, queue, pdf_export и общего application logging.

Структурированный контекст

Использовал структурированный контекст в логах:

  • user_id;
  • маршрут и путь запроса;
  • статус ответа;
  • длительность выполнения;
  • технические идентификаторы;
  • служебные параметры бизнес-операции.

Уровни логирования и дисциплина

Использовал уровни логирования по PSR-3:

  • info для нормальных прикладных событий;
  • notice для значимых, но ожидаемых отклонений;
  • warning для проблемных ситуаций без аварии;
  • error / critical для сбоев и исключений.

Логирование фоновых задач

Отдельно настраивал логирование фоновых процессов:

  • очередей;
  • jobs;
  • экспорта файлов;
  • асинхронных операций;
  • технических процессов вокруг генерации артефактов.

Исключения и проблемные сценарии

Для ошибок и исключений обычно закладывал:

  • логировать исключения с контекстом;
  • не терять request/user context;
  • различать ожидаемые бизнес-ошибки и технические сбои;
  • не писать в лог чувствительные данные;
  • делать формат ошибок пригодным для связи с API-ответами.

Локальная отладка

Подключал логирование к локальным инструментам отладки:

  • подключение Buggregator;
  • отправка логов в socket handler;
  • использование JSON formatter для внешних обработчиков;
  • раздельное включение/отключение debug-инструментов через env-конфиг.

Централизованный сбор логов

Подключал централизованный лог-стек:

  • Promtail как агент чтения логов;
  • Loki как хранилище;
  • Grafana для поиска и визуализации.

Под это выделял отдельный compose-стек, где:

  • приложение пишет логи в storage/logs;
  • Promtail считывает эти логи;
  • Loki хранит поток событий;
  • Grafana используется для поиска и анализа.

См. также

Сайт обновлен и проверен: