该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

日志通道适配器

<日志通道适配器>通常与窃听器配合使用,详见《窃听器》中讨论。 然而,它也可以作为任何流的最终消耗者。 例如,考虑一个以<服务激活器>这会返回一个结果,但你想丢弃该结果。 为此,你可以将结果发送到零通道. 或者,你也可以把它路由到信息水平<日志通道适配器>. 这样,当你登录时可以看到丢弃的消息信息但在(例如)登录时看不到警告水平。 其中零通道,在调试水平。 以下列表展示了所有可能的属性日志通道适配器元素:spring-doc.cadn.net.cn

<int:logging-channel-adapter
    channel="" (1)
    level="INFO" (2)
    expression="" (3)
    log-full-message="false" (4)
    logger-name="" /> (5)
1 连接日志适配器与上游组件的通道。
2 发送给该适配器的消息所处的日志级别将被记录。 违约:信息.
3 一个SpEL表达式,表示消息中哪些部分被记录。 违约:有效载荷—— 只有有效载荷被记录。 如果日志-完整消息是指定,但该属性无法指定。
4 什么时候true,整个消息(包括头部)都会被记录。 违约:false—— 只有有效载荷被记录。 如果表达被指定。
5 指定了名称Logging工(称为类别log4j). 用于识别该适配器产生的日志消息。 这使得在日志子系统中为各个适配器设置日志名称。 默认情况下,所有适配器都以以下名称登录:org.springframework.integration.handler.LoggingHandler.

使用 Java 配置

以下 Spring Boot 应用程序展示了配置日志处理器通过使用 Java 配置:spring-doc.cadn.net.cn

@SpringBootApplication
public class LoggingJavaApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context =
             new SpringApplicationBuilder(LoggingJavaApplication.class)
                    .web(false)
                    .run(args);
         MyGateway gateway = context.getBean(MyGateway.class);
         gateway.sendToLogger("foo");
    }

    @Bean
    @ServiceActivator(inputChannel = "logChannel")
    public LoggingHandler logging() {
        LoggingHandler adapter = new LoggingHandler(LoggingHandler.Level.DEBUG);
        adapter.setLoggerName("TEST_LOGGER");
        adapter.setLogExpressionString("headers.id + ': ' + payload");
        return adapter;
    }

    @MessagingGateway(defaultRequestChannel = "logChannel")
    public interface MyGateway {

        void sendToLogger(String data);

    }

}

使用 Java DSL 配置

以下 Spring Boot 应用程序展示了使用 Java DSL 配置日志通道适配器的示例:spring-doc.cadn.net.cn

@SpringBootApplication
public class LoggingJavaApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context =
             new SpringApplicationBuilder(LoggingJavaApplication.class)
                    .web(false)
                    .run(args);
         MyGateway gateway = context.getBean(MyGateway.class);
         gateway.sendToLogger("foo");
    }

    @Bean
    public IntegrationFlow loggingFlow() {
        return IntegrationFlow.from(MyGateway.class)
                     .log(LoggingHandler.Level.DEBUG, "TEST_LOGGER",
                           m -> m.getHeaders().getId() + ": " + m.getPayload());
    }

    @MessagingGateway
    public interface MyGateway {

        void sendToLogger(String data);

    }

}