【问题标题】:Sending Logging Message with Interceptor in Spring Integration在 Spring 集成中使用拦截器发送日志消息
【发布时间】:2013-02-04 15:42:54
【问题描述】:

是否可以在 Spring Integration 中配置拦截器来指定日志消息?

这与使用窃听将消息发送到日志通道适配器订阅的日志通道形成对比。这种方法的问题在于日志通道具有确切记录内容的表达式。在我的用例中,我想使用全局通道拦截器来指定日志消息并将其发送到日志通道适配器,而不必为我可能想要的每个可能的日志消息定义一个日志通道适配器。

有那么一刻,我想我可以定义一个带有 SpEL 表达式的服务激活器,以在通道拦截器定义中生成字符串日志消息(以及所需日志通道的输出通道),但它正在寻找输入-频道。

【问题讨论】:

    标签: java spring logging spring-integration


    【解决方案1】:

    您可以创建您感兴趣的频道<publish-subscribe-channel/>s,而不是使用窃听器。

    将适当的转换器订阅到通道(output-channel 转到日志适配器)。

    您可以使用转换器和其他订阅者上的order 属性来控制日志是在真实订阅者之前还是之后发生。

    另一种选择是在消息中添加标头的全局拦截器

    MessageBuilder.fromMessage(message).setHeader('foo', routeForThisMessageType).build()
    

    然后将其发送到<header-value-router/>,后者又路由到适当的转换器,然后再路由到单个日志记录通道适配器。

    当然,如果您愿意,您可以将路由和/或转换直接组合到拦截器中。

    【讨论】:

    • 谢谢加里。遗憾的是,我无法更改原始频道(我有一个“抽象”项目和一组配置,并且实施子项目填补了空白)。我希望用一个全局拦截器来“装饰”现有的频道。
    • 我在答案中添加了其他替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2011-11-10
    • 2015-09-27
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多