Spring 集成 DSL:在 AbstractMessageHandler 中禁用双重 DEBUG 日志记录
Spring Integration DSL: Disable double DEBUG logging in AbstractMessageHandler
我正在使用 Spring Integration DSL 中的 .log() 函数,我想在 DEBUG 级别创建一个日志。这是一个例子:
...
.<DataDTO>log(LoggingHandler.Level.DEBUG, "Http Input Flow V2",
message -> {
DataDTO dto = message.getPayload();
return "Input data: " + dto.toString;
})
...
这有效,但是,创建了两条日志消息:实际的日志消息 Input data: ...
和来自 AbstractMessageHandler
:
的一条
@Override
public void handleMessage(Message<?> message) {
...
if (this.loggingEnabled && this.logger.isDebugEnabled()) {
this.logger.debug(this + " received message: " + message);
}
...
}
在AbstractMessageHandler
中,this.loggingEnabled
默认设置为true
。
是否可以在 AbstractMessageHandler
中禁用日志记录但保留自定义日志消息?我尝试将 application.yml
中 AbstractMessageHandler
的日志记录级别设置为 ERROR
,但这没有帮助。
我认为您的日志记录配置中有类似 org.springframework.integration=DEBUG
甚至 org.springframework=DEBUG
的内容。
文字 "Http Input Flow V2"
对于类别来说有点尴尬:
/**
* Populate a {@link WireTap} for the {@link #currentMessageChannel}
* with the {@link LoggingHandler} subscriber for the provided
* {@link LoggingHandler.Level} logging level, logging category
* and {@link Function} for the log message.
* @param level the {@link LoggingHandler.Level}.
* @param category the logging category.
* @param function the function to evaluate logger message at runtime
* @param <P> the expected payload type.
* against the request {@link Message}.
* @return the current {@link IntegrationFlowDefinition}.
* @see #wireTap(WireTapSpec)
*/
public <P> B log(LoggingHandler.Level level, String category, Function<Message<P>, Object> function) {
另外,loggingEnabled
可以被 @EnableIntegrationManagement
及其:
禁用
/**
* Use to disable all logging in the main message flow in framework components. When 'false', such logging will be
* skipped, regardless of logging level. When 'true', the logging is controlled as normal by the logging
* subsystem log level configuration.
* <p>
* It has been found that in high-volume messaging environments, calls to methods such as
* {@code logger.isDebuggingEnabled()} can be quite expensive and account for an inordinate amount of CPU
* time.
* <p>
* Set this to false to disable logging by default in all framework components that implement
* {@link IntegrationManagement} (channels, message handlers etc). This turns off logging such as
* "PreSend on channel", "Received message" etc.
* <p>
* After the context is initialized, individual components can have their setting changed by invoking
* {@link IntegrationManagement#setLoggingEnabled(boolean)}.
* @return the value; true by default.
*/
String defaultLoggingEnabled() default "true";
我正在使用 Spring Integration DSL 中的 .log() 函数,我想在 DEBUG 级别创建一个日志。这是一个例子:
...
.<DataDTO>log(LoggingHandler.Level.DEBUG, "Http Input Flow V2",
message -> {
DataDTO dto = message.getPayload();
return "Input data: " + dto.toString;
})
...
这有效,但是,创建了两条日志消息:实际的日志消息 Input data: ...
和来自 AbstractMessageHandler
:
@Override
public void handleMessage(Message<?> message) {
...
if (this.loggingEnabled && this.logger.isDebugEnabled()) {
this.logger.debug(this + " received message: " + message);
}
...
}
在AbstractMessageHandler
中,this.loggingEnabled
默认设置为true
。
是否可以在 AbstractMessageHandler
中禁用日志记录但保留自定义日志消息?我尝试将 application.yml
中 AbstractMessageHandler
的日志记录级别设置为 ERROR
,但这没有帮助。
我认为您的日志记录配置中有类似 org.springframework.integration=DEBUG
甚至 org.springframework=DEBUG
的内容。
文字 "Http Input Flow V2"
对于类别来说有点尴尬:
/**
* Populate a {@link WireTap} for the {@link #currentMessageChannel}
* with the {@link LoggingHandler} subscriber for the provided
* {@link LoggingHandler.Level} logging level, logging category
* and {@link Function} for the log message.
* @param level the {@link LoggingHandler.Level}.
* @param category the logging category.
* @param function the function to evaluate logger message at runtime
* @param <P> the expected payload type.
* against the request {@link Message}.
* @return the current {@link IntegrationFlowDefinition}.
* @see #wireTap(WireTapSpec)
*/
public <P> B log(LoggingHandler.Level level, String category, Function<Message<P>, Object> function) {
另外,loggingEnabled
可以被 @EnableIntegrationManagement
及其:
/**
* Use to disable all logging in the main message flow in framework components. When 'false', such logging will be
* skipped, regardless of logging level. When 'true', the logging is controlled as normal by the logging
* subsystem log level configuration.
* <p>
* It has been found that in high-volume messaging environments, calls to methods such as
* {@code logger.isDebuggingEnabled()} can be quite expensive and account for an inordinate amount of CPU
* time.
* <p>
* Set this to false to disable logging by default in all framework components that implement
* {@link IntegrationManagement} (channels, message handlers etc). This turns off logging such as
* "PreSend on channel", "Received message" etc.
* <p>
* After the context is initialized, individual components can have their setting changed by invoking
* {@link IntegrationManagement#setLoggingEnabled(boolean)}.
* @return the value; true by default.
*/
String defaultLoggingEnabled() default "true";