Что если я не удаляю данные контекста из 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.
Надеюсь это поможет.