【问题标题】:Spring Integration logging error channel (slf4j + logback)Spring Integration 记录错误通道(slf4j + logback)
【发布时间】:2015-02-14 15:03:29
【问题描述】:

我正在使用带有此配置的 Spring 集成:

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

@MessagingGateway(name = "gatewayInbound", 
defaultRequestChannel="farsRequestChannel", errorChannel="errorChannel"){
}

使用此配置,我避免显示消息,但我想创建一个基本日志,例如 LOGGER.error()。

此外,我正在使用 SLFJ 和 logbak。因此,完美的场景是将此错误消息与我的 logback XML 中的类似配置集成。出于这个原因:

  • 我可以使用 logback 来记录 Spring 集成 errorChannel LOGS 吗?
  • 我可以显示发送到 errorChannel 的错误吗?
  • 我可以在 logback 中使用这个类似的表达式来个性化这个错误吗?如果我使用 LoggingHandler,我会看到完整的堆栈跟踪,并且我想自定义此消息。

    [%-5level] - %d{dd/MM/YYYY HH:mm:ss} - [%file:%line] - %msg%n

【问题讨论】:

  • Spring 集成已经为此提供了logging-channel-adapter。这使用公共日志记录,因此您基本上可以做任何您想做的事情......
  • 好的,正如我的示例所示,我正在使用带注释的 spring 集成和 logback。你能提供一些关于这个例子的参考吗?我没有使用公共日志记录

标签: spring logging spring-integration slf4j logback


【解决方案1】:
@Bean
@ServiceActivator(inputChannel="myErrorChannel")
public MessageHandler myLogger() {
    return new MessageHandler() {

        @Override
        public void handleMessage(Message<?> message) throws MessagingException {
            ErrorMessage em = (ErrorMessage) message;
            String errorMessage = em.getPayload().getMessage();

            // log it

            throw (MessagingException) em.getPayload();
        }
    };
}

如果不想传播异常,直接消费即可,但需要在网关上设置defaultReplyTimeout=0(会返回null)。

@Bean
@ServiceActivator(inputChannel="myErrorChannel")
public MessageHandler loggingHandler() {
    LoggingHandler loggingHandler = new LoggingHandler("ERROR");
    loggingHandler.setExpression("payload.message");
    return loggingHandler;
}

(在这种情况下会消耗错误)。

【讨论】:

  • 谢谢加里。 B) 正是我想要的。对我来说,你的回答最有用的是:loggingHandler.setExpression("payload.message")。因为我正在使用类似的东西,但它返回 LoggingHandler 而不是 MessageHandler
猜你喜欢
  • 2020-08-07
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2017-05-06
  • 2017-12-13
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多