Java 更改默认Spring集成DirectChannel日志记录

Java 更改默认Spring集成DirectChannel日志记录,java,spring,spring-boot,spring-mvc,spring-integration,Java,Spring,Spring Boot,Spring Mvc,Spring Integration,目前默认情况下,Spring Integration以以下格式写入调试日志: DEBUG date time | producer-1 | o.s.i.c.DirectChannel | send line: 123 | preSend on channel 'myChannel', message: GenericMessage [payload=myPayload(), headers={content-length=XYZ, http_requestMethod=POST, error

目前默认情况下,Spring Integration以以下格式写入调试日志:

DEBUG date time | producer-1 | o.s.i.c.DirectChannel | send line: 123 | 
preSend on channel 'myChannel', message: GenericMessage [payload=myPayload(), 
headers={content-length=XYZ, http_requestMethod=POST, errorChannel=errorChannel,
authorization=Bearer myExtremelyLongToken, replyChannel=replyChannel}]
上面的日志示例看起来相当简洁,但是当包含一个大的JSON负载和许多头时,它很快就会变得非常笨拙

其中最大的贡献者是授权标头。此标题可以包含数百个字符,这使得在80宽度的终端上几乎不可能有超过一条长消息

是否有方法或可以编辑DirectChannel日志以排除授权标头

理想情况下,我们也不喜欢在日志中重复包含授权令牌,因为它们是生产令牌


我不得不相信,有某种方法可以隐藏这些默认日志的某些部分。

嗯,在登录之前,不可能过滤掉消息的内容(目前):

但是,您可以停止使用
org.springframework.integration
的调试日志记录级别,而是在特定通道上使用有线点击来捕获他们的消息,并将它们发送到带有自定义类别和特定
setLogExpression
LoggingHandler
中,以便在记录消息之前对其进行处理。该表达式可以调用某个bean(使用
@
操作符),并将
#root
作为参数,该参数是整个
消息
用于日志记录。只记录该调用的结果。因此,您可以在将从此表达式调用的目标bean中自由构建任何过滤逻辑

查看文档中的更多信息:

  • 金属丝锥-
  • 日志通道适配器-
  • SpEL支持-

感谢您的支持,我相信我们可以通过一些渠道来实现这一点。对于我们拥有的数百个通道来说,这将需要相当多的额外XML,因此我期待一个受支持的实现,让我们能够改变默认的日志记录。