Использование журналирования MDC с виртуальными потокамиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование журналирования MDC с виртуальными потоками

Сообщение Anonymous »

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

Код: Выделить всё

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
String requestId = UUID.randomUUID().toString();
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
httpServletResponse.setHeader("requestId", requestId);
MDC.put("requestId", requestId);
chain.doFilter(request, response);
} finally {
MDC.remove("requestId");
}
}
Конфигурация журналирования.

Код: Выделить всё

%d %-5level %X{requestId} [%t] %C{10}:%L %m%n
Пример ведения журнала.

Код: Выделить всё

2024-02-04 10:29:55,160 INFO  99cd4d64-5d7c-4577-a5d3-cb8d48d1dfd5 [http-nio-8080-exec-6] c.s.q.UserController:65 Deleteing user 'test'
2024-02-04 10:29:55,260 INFO  99cd4d64-5d7c-4577-a5d3-cb8d48d1dfd5 [http-nio-8080-exec-6] c.s.q.UserController:70 Successfully deleted user 'test'
С виртуальными потоками в Java 21+ у меня сложилось впечатление, что поток может автоматически приостановить запрос, пока он ожидает любого ввода-вывода, и поток может начать работать над другими запросами. В этом сценарии кажется, что MDC журнала может «просачиваться» в другие журналы запросов, когда поток начинает обслуживать другие запросы. Как мне обойти эту проблему, чтобы продолжать добавлять уникальное значение к операторам регистрации каждого запроса?

Подробнее здесь: https://stackoverflow.com/questions/779 ... al-threads
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»