Spring Integration DSL:禁用AbstractMessageHandler重复DEBUG日志
解决Spring Integration DSL log() 重复日志问题
你遇到的这个重复日志问题很常见——原因是LoggingHandler继承自AbstractMessageHandler,而后者的loggingEnabled属性默认是true,会在处理消息时额外输出一条通用的"Handling message..."类日志,和你自定义的日志并存。
直接修改AbstractMessageHandler的日志级别没用的核心原因是:这条额外日志并不是通过AbstractMessageHandler类的Logger输出的,而是由具体实现类(也就是LoggingHandler)的Logger输出的,所以调整父类的日志级别根本不会生效。
正确的解决方案
在你的DSL配置里,直接通过loggingEnabled(false)关闭AbstractMessageHandler层面的日志输出,只保留自定义的日志内容:
.<DataDTO>log(LoggingHandler.Level.DEBUG, "Http Input Flow V2", message -> { DataDTO dto = message.getPayload(); return "Input data: " + dto.toString(); }) .loggingEnabled(false) // 关闭AbstractMessageHandler的默认日志
原理说明
log()方法返回的LoggingHandlerSpec继承自AbstractMessageHandlerSpec,提供了loggingEnabled()方法来直接控制父类AbstractMessageHandler的loggingEnabled属性。设置为false后,就会禁用它在handleMessage方法中输出的通用日志,只保留你自定义的那条日志内容。
这种方式比调整日志级别更精准,不会影响其他AbstractMessageHandler子类组件的日志输出。
内容的提问来源于stack exchange,提问作者matthjes




