我正在使用Spring与此配置集成:
@Bean MessageChannel errorChannel(){
return new PublishSubscribeChannel();
}
@MessagingGateway(name = "gatewayInbound",
defaultRequestChannel="farsRequestChannel", errorChannel="errorChannel"){
}
使用此配置,我避免显示消息,但我想创建一个基本日志,例如LOGGER.error()。
此外,我正在使用SLFJ和logbak。因此,完美的场景将在我的logback XML中将此错误消息与类似配置集成。出于这个原因:
我可以使用logback中的这个类似表达来个性化此错误吗?如果我使用LoggingHandler,我会看到完整的堆栈跟踪,我想自定义此消息。
[% - 5level] - %d {dd / MM / YYYY HH:mm:ss} - [%file:%line] - %msg%n
答案 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;
}
(在这种情况下会消耗错误)。