Что если я не удаляю данные контекста из MDC?

Я знаю, что MDC - это карта, в которой хранятся данные контекста конкретного потока, в котором работает контекст. Я работаю в ситуации, когда я хочу, чтобы каждый оператор журнала печатал определенные данные, которые не ограничены каким-либо конкретным потоком, но, в частности, приложением, например, для. имя текущего узла, на котором запущено мое приложение. Итак, я добавил имя узла в MDC

MDC.put ("источник",source_name);

Поскольку это зависит от приложения, я не хочу удалять его из MDC (если мое приложение по какой-то причине закрывается, в любом случае MDC будет очищен, если я не ошибаюсь).

Просто интересно, что произойдет, если я не удалю ключ из MDC и как это повлияет на мое приложение? Будет ли утечка памяти или что-то в этом роде?

1 ответ

Решение

Влияния нет, за исключением того, что в журнале будет некорректный текст MDC. Например, MDC добавляется в thread1, тогда любой журнал, который вышел из системы с помощью thread1, будет иметь текст MDC (несомненно, это также будет зависеть от конфигурации logback).

И если я должен сказать, что это немного влияет на производительность, потому что данные MDC хранятся в ThreadLocal. Как вы упомянули, ThreadLocal подобен карте, использующей поток в качестве ключа. При входе в систему будет операция, подобная get.

И маловероятно, что произойдет утечка памяти, потому что в вашем случае в MDC будут помещены только очень ограниченные данные, а данные будут просто String (я полагаю, source_name является строкой).

И да. Если каким-то образом приложение закрывается, поток исчезает, и нет ни ThreadLocal, ни MDC.

Надеюсь это поможет.

Другие вопросы по тегам