我正在使用
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;
}
(在这种情况下将消耗错误).