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

最佳答案

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

(在这种情况下将消耗错误).

点赞