5

我正在使用 Spring Integration 来开发我的集成场景。当我必须写一些日志来提供一些信息时,我是这样写的:

@Bean
IntegrationFlow blacklist(BlacklistService service) {
    return m -> m
            .wireTap(f -> f.handle(t -> log.info("Adding email source address in blacklist...")))
            .<MessageHandlingException, Blacklist>transform(p -> SourceBlacklist.of((Email) p.getFailedMessage().getHeaders().get(IntegrationConstants.MailSender.EMAIL)))
            .wireTap(f -> f.handle(t -> log.info("Email source address added to blacklist.")))
            .handle(service, "voidSave");
}

我正在使用带有 lambda 和句柄的窃听器来记录我的消息。有没有更好的方法来使用 Java DSL 使用 Spring Integration 编写日志?

谢谢。

4

1 回答 1

5

您始终可以打开该org.springframework.integration类别的日志记录。

另一方面,Spring Integration 建议将集成流作为adapter-登录<logging-channel-adapter>。因此,您只需将消息发送到该适配器的通道即可。从配置的角度来看,如下所示:

<wire-tap channel="logging" pattern="*"/>

<logging-channel-adapter id="logging"/>

我们可以使用 Java DSL 进行配置,但我们应该依赖于目标类 - LoggingHandler

@ServiceActivator(inputChannel = "logging")
@Bean
public loggingHandler() {
    return new LoggingHandler();
}

...

.transform()
.wireTap("logging")
.handle();

虽然我明白你的意思,我们真的可以直接在框架中添加一些方便的东西。

随意提出关于此事的 GH 问题(https://github.com/spring-projects/spring-integration-java-dsl/issues),我们将继续在那里讨论该功能。

但说实话,现在你的解决方案看起来还不错。

更新

关于此事的框架请求:https ://github.com/spring-projects/spring-integration-java-dsl/issues/70

于 2016-03-09T22:03:54.060 回答