2017-02-10 13 views
2

Мне нравится использовать поля ведения журнала MDC в моих приложениях, потому что это упрощает поиск всех связанных строк журнала sooooo. Мне также гораздо проще очистить() контекст MDC в начале обработки, потому что я знаю, где точка входа в мое приложение, но есть много возможных путей исключения, когда я или другой разработчик, возможно, забыл вызвать MDC.clear ().Есть ли недостатки вызова MDC.clear() в начале обработки, а не в конце?

Итак, мой вопрос в том, есть ли недостатки в том, как я это делаю? очищая контекст всегда как правило большого пальца в начале обработки до конца.

Чтобы быть ясным, если я пишу код с нуля, я бы что-то вроде:

MDC.put(); 
try { 
... 
} finally { 
    MDC.clear(); 
} 

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

ответ

1

Рекомендовано быть осторожным по этому вопросу. Если вы ссылаетесь на начало приложения, это не имеет смысла, и у MDC ничего не было бы в то время. Я предполагаю, что ваша ссылка находится в начале запроса, но в этом случае, если вы это сделаете, могут быть обработаны другие запросы, обрабатываемые параллельно, и очистка MDC повлияет на регистрацию всех других запросов. Вы можете вызвать MDC.remove() в конце каждого запроса. Не зная ваше точное приложение, это все, что я могу предложить.

+0

ОК немного больше контекста, я работаю над средними приложениями, поэтому обработка машинного запроса машины. Поэтому в моем случае ВСЕ значения в контексте имеют смысл только для времени жизни этого конкретного запроса, поэтому я вызываю MDC.clear() в начале обработки следующего запроса. – crabe

+0

MDC поможет, если ваше приложение построено с помощью модели обмена нитями. Если он использует что-то вроде Netty, где один цикл событий обрабатывает все запросы, тогда это поможет. Для большинства других веб-приложений я обнаружил, что печать только номера потоков достаточна для идентификации запросов. –