在 spring-cloud-stream-binder-kafka 中配置(spring 集成的)logginghandler

问题描述 投票:0回答:1

我有一个关于这个问题的后续问题
有没有办法在 Spring Cloud Stream 中自定义 Spring Integration 模块的 LoggingHandler ?即,将 shouldLogFullMessage 设置为 false 或将 logExpression 设置为最小值?可以在 application.yaml 中的活页夹/绑定配置中完成。因为现在即使已经设置了 DLQ 并且设置了错误处理程序定义,日志记录处理程序也会使用完整的有效负载记录消息。不想通过设置日志级别来静音日志。只是想减少logginghandler的日志内容可能是为了@sobychacko

  • 寻找文档来配置日志处理程序,但在 Spring Cloud Stream 文档中没有找到它
  • 但是它提到需要在容器级别配置一些错误处理,因此在here进行了检查,它也提供了 Spring Kafka 的定制。我假设可以在这里进行一些定制,以用其他一些处理程序替换logginghandler,但不确定如何!
spring-integration spring-kafka spring-cloud-stream-binder-kafka
1个回答
0
投票

Spring Cloud Stream 完全依赖于 Spring Integration 提供的任何相关内容。因此,Spring Integration 创建一个

errorChannel
(如果尚不存在),并使用一些默认值订阅它
LoggingHandler

        this.registry.registerBeanDefinition(errorLoggerBeanName,
                BeanDefinitionBuilder.genericBeanDefinition(LoggingHandler.class)
                        .addConstructorArgValue(LoggingHandler.Level.ERROR)
                        .addPropertyValue(IntegrationNamespaceUtils.ORDER, Ordered.LOWEST_PRECEDENCE - 100)
                        .getBeanDefinition());

所以,是的,你是对的:没有办法自定义默认值

LoggingHandler
。请随意提出 Spring Integration 的 GH 问题:我们需要考虑这个默认的
LoggingHandler
是否必须通过配置属性进行自定义。

现在的解决方案是这样的:

    @Bean
    PublishSubscribeChannel errorChannel() {
        return new PublishSubscribeChannel();
    }

    @Bean
    @ServiceActivator(inputChannel = "errorChannel")
    LoggingHandler errorLoggingHandler() {
        LoggingHandler loggingHandler = new LoggingHandler(LoggingHandler.Level.ERROR);
        loggingHandler.setLogExpression(new FunctionExpression<ErrorMessage>(m -> m.getPayload().getMessage()));
        return loggingHandler;
    }

这样我们就可以覆盖默认情况下 Spring Integration 中可以完成的任何操作。另外,请注意在 Java 中执行此操作更加清晰,而不是我们会尝试从配置属性中确定表达式可能出现的问题。因此,我还不太确信我们应该通过 bean 覆盖来公开这些属性,而不是长期存在的解决方案:https://docs.spring.io/spring-integration/reference/error-handling.html

© www.soinside.com 2019 - 2024. All rights reserved.