【问题标题】:How to collect logs from Integration Flow steps如何从集成流程步骤收集日志
【发布时间】:2019-08-23 08:56:28
【问题描述】:

我的应用程序上有几个不同的集成流程,目前它们基于 cron 运行,它们是从我的 MessagingGateway 实例化的,所以当我的流程运行时我发送一个名为“executionId”的标头,所以我想记录所有“跑步”所做的活动。

关于如何从我的流程中捕获每个日志的任何想法?例如像

这样的日志

"file x has been successfully transferred"

"Cannot delete local file x. The local file may be busy in some other process."

我需要消息处理器/处理程序上已经存在的相同日志输出,有没有办法根据消息头上的 executionId 将它们全部捕获并写入数据库?

目前我正在各处添加 .log 并根据建议添加 onSuccessChannel,但我认为应该有更好的方法

【问题讨论】:

    标签: spring spring-boot spring-integration spring-integration-dsl


    【解决方案1】:

    出于全局目的,您可以使用带有@GlobalChannelInterceptor 和特定通道名称/模式配置的WireTap bean。本质上,log()wireTap 完全相同,但在特定的地方。使用@GlobalChannelInterceptor,您可以将WireTap 添加到所有bean 名称与配置匹配的通道中。

    在参考手册中查看更多信息:

    https://docs.spring.io/spring-integration/docs/5.2.0.BUILD-SNAPSHOT/reference/html/dsl.html#java-dsl-log https://docs.spring.io/spring-integration/docs/5.2.0.BUILD-SNAPSHOT/reference/html/core.html#channel-interceptors

    【讨论】:

    • 谢谢,启动并运行,现在是否需要获取消息发布活动?我的意思是,“ftp 已上传文件”,现在我只是将所有消息放在一起,或者顺便说一下,我如何将 .handle() 与 Ftp.outbound 匹配?
    • 是的,这也可以。如果现有的WireTap 不符合您的要求,您真的可以实现自己的ChannelInterceptor 并将其配置为@Bean 以及@GlobalChannelInterceptor。只有当您的班级也是@Component 时,它才适用于班级级别。但是如果你把它配置成@Bean,那么@GlobalChannelInterceptor就必须去那里。
    • 它正在工作,但我不知道它处于流程的哪个“阶段”,有没有办法知道它是否正在被句柄/被拆分或类似的东西处理?我现在有消息 + 标题,所以如果没有办法这样做,我将不得不做一个丰富的标题告诉阶段?谢谢
    • 为此,我们建议使用Message History 模式实现:docs.spring.io/spring-integration/docs/5.2.0.BUILD-SNAPSHOT/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多