Files
digital-garden/dev/Mapped Diagnostic Context.md
Struchkov Mark ee66c043b8
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2025-02-25 21:32:31 +03:00

5.2 KiB
Raw Permalink Blame History

aliases, tags, date
aliases tags date
MDC
maturity/🌱
2025-02-24

MDC — это структура данных, основанная на концепции ThreadLocal, которая позволяет привязать набор ключ-значение к текущему fundamental/Поток процесса ОС выполнения. Это значит, что для каждого потока можно задать свой уникальный контекст, который автоматически будет включаться в записи лога.

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

Зачем нужен MDC

  • Улучшение отладки и мониторинга: Благодаря MDC в каждом сообщении лога оказывается дополнительная информация (например, request ID, user ID). Это помогает быстро сопоставить связанные события и понять, как обрабатывается конкретный запрос.
  • Анализ в распределённых системах: В ../../../wiki/zero/00 Микросервисная архитектура запрос может проходить через несколько сервисов. Использование MDC позволяет передавать и сохранять идентификаторы на протяжении всей цепочки вызовов, что существенно упрощает трассировку.
  • Фильтрация и поиск логов: С дополнительными метаданными логи становятся более структурированными. Это позволяет фильтровать и искать конкретные записи по значимым атрибутам, ускоряя процесс анализа инцидентов.

Основные возможности MDC

  • Добавление контекста: С помощью методов вроде MDC.put(key, value) можно установить необходимые данные, которые автоматически добавляются в каждую запись лога, если логгер настроен на их отображение.
  • Получение и удаление контекста: Методы MDC.get(key) и MDC.remove(key) позволяют получить или удалить конкретное значение, что важно для избежания утечек данных при повторном использовании потоков.
  • Автоматическая интеграция с логгерами: Многие современные логирующие библиотеки, такие как Logback, Log4j или SLF4J, имеют встроенную поддержку MDC. Это позволяет легко настраивать формат логов так, чтобы он автоматически включал информацию из MDC.

Ограничения и нюансы использования

  • Привязка к потоку: Поскольку MDC реализован через ThreadLocal, его данные по умолчанию привязаны к конкретному потоку. В асинхронных и реактивных системах, где управление потоками осуществляется динамически, может возникать необходимость вручную переносить данные MDC между потоками.
  • Ручное управление: Чтобы избежать ошибок и утечек информации, рекомендуется всегда очищать MDC после завершения обработки запроса, например, с помощью конструкции try-finally.

Мета информация

Область:: ../meta/zero/00 Разработка Родитель:: Источник:: Создана:: 2025-02-24 Автор::

Дополнительные материалы

Дочерние заметки