ロギングチャネルアダプター
<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 が指定されている場合、この属性は指定できません。 |
4 | true の場合、メッセージ全体(ヘッダーを含む)が記録されます。デフォルト: 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);
}
}