Мне нравится использовать поля ведения журнала MDC в моих приложениях, потому что это упрощает поиск всех связанных строк журнала sooooo. Мне также гораздо проще очистить() контекст MDC в начале обработки, потому что я знаю, где точка входа в мое приложение, но есть много возможных путей исключения, когда я или другой разработчик, возможно, забыл вызвать MDC.clear ().Есть ли недостатки вызова MDC.clear() в начале обработки, а не в конце?
Итак, мой вопрос в том, есть ли недостатки в том, как я это делаю? очищая контекст всегда как правило большого пальца в начале обработки до конца.
Чтобы быть ясным, если я пишу код с нуля, я бы что-то вроде:
MDC.put();
try {
...
} finally {
MDC.clear();
}
Но иногда я должен использовать базовый класс или что-то из библиотеки, которая не имеет какой-либо связанный с MDC кода и поэтому я делаю это так, как я описал, потому что я не хочу копировать базовый класс из библиотеки, чтобы добавить несколько строк кода MDC ...
ОК немного больше контекста, я работаю над средними приложениями, поэтому обработка машинного запроса машины. Поэтому в моем случае ВСЕ значения в контексте имеют смысл только для времени жизни этого конкретного запроса, поэтому я вызываю MDC.clear() в начале обработки следующего запроса. – crabe
MDC поможет, если ваше приложение построено с помощью модели обмена нитями. Если он использует что-то вроде Netty, где один цикл событий обрабатывает все запросы, тогда это поможет. Для большинства других веб-приложений я обнаружил, что печать только номера потоков достаточна для идентификации запросов. –