日誌通道介面卡
<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 | 指定記錄器的 名稱(在 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);
}
}