Идентификатор корреляции уровня потока интеграции Spring для протоколирования и отслеживания потока

#spring-integration

#spring-интеграция

Вопрос:

Мой поток начинается с опрашивающего входящего адаптера, который передает обработку нижестоящим компонентам на каналах pub / sub с асинхронными исполнителями и активатором службы (оркестратор, использующий 2 шлюза)

Вопросы

1. Я хотел бы регистрировать идентификатор корреляции для каждого выполнения опроса, чтобы я мог отслеживать журналы для выполнения этого потока независимо от другого выполнения того же потока, используя этот идентификатор корреляции, что-то похожее на MDC с UUID. Как мне передать это всем потокам, участвующим в обработке, и вывести идентификатор корреляции в инструкции log?

2. Я также пытаюсь выяснить, какой наилучший подход для ведения журнала. В настоящее время у меня есть запись протоколирования (используемая адаптером протоколирования) на всех каналах. Для этого я хочу иметь возможность включать перехват прослушивания только тогда, когда режим ведения журнала ОТЛАДОЧНЫЙ, например,

  <int:logging-channel-adapter log-full-message="true"
                                 logger-name="tapInbound"
                                 level="DEBUG"
                                 id="loggingChannel"/>
  

Это будет регистрироваться только при отладке регистратора приложений, но перехват прослушивания будет происходить всегда. Как включить перехват прослушивания только при отладке уровня журнала? Возможно, с помощью selector-expression значения чего-то вроде isloggingLevelDebug() . Как мне это сделать?

Ответ №1:

  1. Вы можете использовать рекомендации по опросу или пользовательский перехватчик на первом канале, чтобы установить корреляцию.

  2. Вместо декларативного объявления проводных отводов в XML, вы могли бы программно добавить их к каналам в SmartLifecycle компоненте на ранней стадии ( Integer.MIN_VALUE ).

Комментарии:

1. Как настроить MDC для асинхронной передачи? У меня есть различные асинхронные потоки, и я хотел бы иметь там MDC.

2. Не задавайте новых вопросов в комментариях; это не поможет людям найти вопросы / ответы. MDC.copyContextMap() — добавьте его в качестве заголовка сообщения и установите MDC из него в новом потоке,

3. Конечно, я позабочусь об этом в следующий раз. Спасибо!