记录通道适配器
这<logging-channel-adapter>通常与分线器一起使用,如 Wire Tap 中所述。
但是,它也可以用作任何流的最终使用者。
例如,考虑一个以<service-activator>返回一个 result,但您希望丢弃该结果。
为此,您可以将结果发送到NullChannel.
或者,您可以将其路由到INFO水平<logging-channel-adapter>.
这样,您可以在登录INFO级别,但在 (例如)WARN水平。
使用NullChannel,则在登录到DEBUG水平。
以下清单显示了logging-channel-adapter元素:
<int:logging-channel-adapter
    channel="" (1)
    level="INFO" (2)
    expression="" (3)
    log-full-message="false" (4)
    logger-name="" /> (5)| 1 | 将日志记录适配器连接到上游组件的通道。 | 
| 2 | 将记录发送到此适配器的消息的日志记录级别。
违约: INFO. | 
| 3 | 一个 SPEL 表达式,准确表示记录了消息的哪些部分。
违约: payload— 仅记录有效负载。
如果log-full-message时,不能指定此属性。 | 
| 4 | 什么时候 true,则会记录整个消息(包括标头)。
违约:false— 仅记录有效负载。
如果满足以下条件,则无法指定此属性expression。 | 
| 5 | 指定 name记录器(称为category在log4j).
用于标识此适配器创建的日志消息。
这将允许为各个适配器设置日志名称(在 logging 子系统中)。
默认情况下,所有适配器都使用以下名称记录:org.springframework.integration.handler.LoggingHandler. | 
使用 Java 配置
以下 Spring Boot 应用程序显示了配置LoggingHandler通过使用 Java 配置:
@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 配置日志记录通道适配器的示例:
@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);
    }
}