Java 更改默认Spring集成DirectChannel日志记录
目前默认情况下,Spring Integration以以下格式写入调试日志: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
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支持-