更改默认的Spring Integration DirectChannel日志记录

时间:2020-10-30 15:07:42

标签: 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, errorChannel=errorChannel,
authorization=Bearer myExtremelyLongToken, replyChannel=replyChannel}]

上面的日志示例看起来很简洁,但是当包含一个较大的JSON有效负载和许多标头时,它很快就会变得笨拙。

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

有没有一种方法或可以编辑DirectChannel日志以排除授权标头?

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

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

1 个答案:

答案 0 :(得分:1)

好吧,尚无法在登录之前过滤掉消息的内容:https://github.com/spring-projects/spring-integration/issues/3222

不过,您将不再具有org.springframework.integration的DEBUG日志记录级别,而是在特定频道上使用窃听功能来捕获其消息并将其转储到具有自定义类别的LoggingHandler中特定的setLogExpression在记录消息之前先对其进行处理。该表达式可以调用某个bean(使用@运算符),并以#root作为参数,它是整个Message的日志记录。仅记录该呼叫的结果。因此,您可以在要从该表达式调用的目标bean中自由构建任何过滤逻辑!

在文档中查看更多信息: