ロギングチャネルアダプター

<logging-channel-adapter> は、ワイヤータップに従って、ワイヤタップと組み合わせて使用されることがよくあります。ただし、あらゆるフローの最終的なコンシューマーとしても使用できます。例: 結果を返す <service-activator> で終わるフローを考えますが、その結果を破棄したいとします。そのためには、結果を 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 が指定されている場合、この属性は指定できません。
4true の場合、メッセージ全体(ヘッダーを含む)が記録されます。デフォルト: false — ペイロードのみが記録されます。expression が指定されている場合、この属性は指定できません。
5 ロガーの name を指定します(log4j では category として知られています)。このアダプターによって作成されたログメッセージを識別するために使用されます。これにより、個々のアダプターのログ名を(ロギングサブシステムで)設定できます。デフォルトでは、すべてのアダプターは org.springframework.integration.handler.LoggingHandler という名前でログを記録します。

Java 構成の使用

次の Spring Boot アプリケーションは、Java 構成を使用して LoggingHandler を構成する例を示しています。

@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);

    }

}