0

I'm using the .log() function from Spring Integration DSL and I want to create a log at the DEBUG level. Here is an example:

...
.<DataDTO>log(LoggingHandler.Level.DEBUG, "Http Input Flow V2",          
              message -> {
                 DataDTO dto = message.getPayload();
                 return "Input data: " + dto.toString;
              })
...

This works, however, two logging messages are created: the actual logging message Input data: ... and the one from the AbstractMessageHandler:

@Override
public void handleMessage(Message<?> message) {
    ...
    if (this.loggingEnabled && this.logger.isDebugEnabled()) {
        this.logger.debug(this + " received message: " + message);
    }
    ...
 }

In AbstractMessageHandler, this.loggingEnabled is set to true by default.

Is it possible to disable the logging in the AbstractMessageHandler but keep the custom log message? I've tried to set the logging level for the AbstractMessageHandler in my application.yml to ERROR, but this did not help.

4

1 回答 1

1

我认为您的日志记录配置中有类似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";

falsehttps ://docs.spring.io/spring-integration/docs/5.0.0.RELEASE/reference/html/system-management-chapter.html#_configuring_metrics_capture

于 2018-01-19T14:36:59.500 回答