Spring 用于记录和跟踪流的集成流级别 CorrelationId
Spring Integration Flow Level CorrelationId for logging and tracking flow
我的流程从一个轮询入站适配器开始,它将处理交给 pub/sub 通道上的下游组件,其中包含异步执行器和服务激活器(使用 2 个网关的编排器)
问题
1. 我想为每次执行的轮询记录相关 ID,以便我可以独立于同一流程的另一次执行来跟踪该流程执行的日志使用此 correlationId,类似于具有 UUID 的 MDC。如何将其传递给所有参与处理的线程,并在日志语句中输出correlationId?
2. 我也在尝试找出最好的日志记录方法。目前,我在所有通道上都有一个日志 wireTap(由日志适配器使用)。对于这个,我希望仅当日志记录模式为 DEBUG 时才能够启用 wireTap 拦截
例如,
<int:logging-channel-adapter log-full-message="true"
logger-name="tapInbound"
level="DEBUG"
id="loggingChannel"/>
这只会在应用程序记录器为 DEBUG 时记录,但 wireTap 拦截将始终发生。如何仅在日志级别为 DEBUG 时启用 wireTap 拦截?可能是通过使用 selector-expression
和类似 isloggingLevelDebug()
的值。我该怎么做?
您可以在第一个通道上使用 advice on the poller 或自定义拦截器来设置相关性。
无需在 XML 中以声明方式声明窃听器,您可以在早期阶段以编程方式将它们添加到 SmartLifecycle
bean 中的通道(Integer.MIN_VALUE
).
我的流程从一个轮询入站适配器开始,它将处理交给 pub/sub 通道上的下游组件,其中包含异步执行器和服务激活器(使用 2 个网关的编排器)
问题
1. 我想为每次执行的轮询记录相关 ID,以便我可以独立于同一流程的另一次执行来跟踪该流程执行的日志使用此 correlationId,类似于具有 UUID 的 MDC。如何将其传递给所有参与处理的线程,并在日志语句中输出correlationId?
2. 我也在尝试找出最好的日志记录方法。目前,我在所有通道上都有一个日志 wireTap(由日志适配器使用)。对于这个,我希望仅当日志记录模式为 DEBUG 时才能够启用 wireTap 拦截 例如,
<int:logging-channel-adapter log-full-message="true"
logger-name="tapInbound"
level="DEBUG"
id="loggingChannel"/>
这只会在应用程序记录器为 DEBUG 时记录,但 wireTap 拦截将始终发生。如何仅在日志级别为 DEBUG 时启用 wireTap 拦截?可能是通过使用 selector-expression
和类似 isloggingLevelDebug()
的值。我该怎么做?
您可以在第一个通道上使用 advice on the poller 或自定义拦截器来设置相关性。
无需在 XML 中以声明方式声明窃听器,您可以在早期阶段以编程方式将它们添加到
SmartLifecycle
bean 中的通道(Integer.MIN_VALUE
).