记录通道适配器
这通常与分线器结合使用,如 Wire Tap 中所述。
但是,它也可以用作任何流的最终使用者。
例如,假设有一个流以 a 结尾,该流返回一个结果,但您希望丢弃该结果。
为此,您可以将结果发送到 .
或者,也可以将其路由到级别 .
这样,当您在级别记录时可以看到丢弃的消息,但在 (例如) 级别记录时看不到它。
使用 ,在级别记录时,您只会看到丢弃的消息。
下面的清单显示了该元素的所有可能属性:<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 表达式,准确表示记录了消息的哪些部分。
Default: — 仅记录有效负载。
如果指定,则无法指定此属性。payload log-full-message |
4 | 当 时,将记录整个消息(包括报头)。
Default: — 仅记录有效负载。
如果指定了此属性,则无法指定此属性。true false expression |
5 | 指定记录器的 (称为 in )。
用于标识此适配器创建的日志消息。
这将允许为各个适配器设置日志名称(在 logging 子系统中)。
默认情况下,所有适配器都使用以下名称记录:。name category log4j 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);
}
}