Spring Integration日志记录错误通道(slf4j + logback)

时间:2014-12-16 10:21:37

标签: spring logging spring-integration slf4j logback

我正在使用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

1 个答案:

答案 0 :(得分:2)

@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;
}

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