【问题标题】:Using MDC with Spring Integration将 MDC 与 Spring 集成一起使用
【发布时间】:2016-01-23 23:54:01
【问题描述】:

我想在我的 Spring Integration 实现中引入有效的日志记录。我已经有记录有效载荷和标头的全局窃听器。然而,我们有很多服务激活器,它们有很多业务逻辑。我想在每个日志中记录重要信息,例如用户 ID、请求 ID。我们正在使用 SLF4J。 Spring 集成流程具有多个由 Spring 集成管理的线程池执行器。

我是否应该使用 AOP,在每次方法调用之前,我从消息头中检索用户 ID 和请求 ID 并将其设置在 SLF4J MDC 中?然后在方法执行结束后清除它。它将在 finally 块中具有清除逻辑。这是一种正确的方法还是会造成性能瓶颈?不知道为什么没有像在多线程 SI 流中那样讨论这个问题,如果没有用户信息,调试日志会变得非常困难。

如果有更好的方法,请提出建议。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    参见SecurityContextPropagationChannelInterceptor 介绍的in 4.2

    注意它是ThreadStatePropagationChannelInterceptor的子类。

    当消息传递到另一个线程时,您可以使用类似的技术来传播/清理 MDC。这将比在该线程的每次调用上执行此操作的开销更少。

    注意要传播的信息是如何与消息一起包装在轻量级消息包装器中的。您还可以将信息存储在消息头中。

    如果您想出一个通用实现,请考虑contributing it to the framework

    【讨论】:

    • 谢谢让我试试。我当前的 Spring 版本是 3.x,因为我们需要支持 JDK 6。计划将其升级到 Spring 4.x。将尝试并发布结果。
    • 我们现在被 spring 3.x 卡住了。所以实现了 aop 将用户信息从 header 注入到每个日志中......
    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 2020-11-17
    • 2011-08-29
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多