記錄通道配接器
<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 — 僅記錄 Payload。如果指定 log-full-message ,則無法指定此屬性。 |
4 | 當 true 時,會記錄整個訊息 (包括標頭)。預設值:false — 僅記錄 Payload。如果指定 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);
}
}