Логгирование JMS сообщений
Различные способы логгирования JMS сообщений:
1. Логгирование внутри конвертора (Плюс в том, что будет логгироваться тело сообщения как есть. Если сообщение невозможно распарстить, то оно тоже залоггируется (если конечно это TextMessage)):
@Bean
public MessageConverter messageConverter() {
MappingJackson2MessageConverter result = new MappingJackson2MessageConverter() {
@Override
public Message toMessage(Object object, Session session) throws JMSException {
TextMessage message = (TextMessage) super.toMessage(object, session);
log.info("Outbound message: " + message.getText());
return message;
}
@Override
public Object fromMessage(Message message) throws JMSException {
log.info("Inbound message: " + ((TextMessage) message).getText());
return super.fromMessage(message);
}
};
result.setObjectMapper(om);
result.setTargetType(MessageType.TEXT);
return result;
}
2. Логгирование внутри jmsTemplate при отправке (Тоже тело сообщения как есть):
jmsTemplate.convertAndSend(response, message -> {
log.info("sending message to output queue - {}", ((TextMessage) message).getText());
message.setJMSCorrelationID(response.getJmsMessageId());
return message;
});
3. Логгирование внутри @JmsListener’а (Тоже тело сообщения как есть):
@JmsListener(destination = "${jms.queue.creation-respond}", containerFactory = "containerFactory")
public Message creationLegalTransferResponse(Message message){
log.info("Recieved response message: {}", messageToLogText(message));
...
}
// -- //
public static String messageToLogText(Message message) {
if (message instanceof TextMessage) {
try {
return ((TextMessage) message).getText();
} catch (JMSException e) {}
}
return message.toString();
}
4. Установка уровня логгирования для входящих сообщений (Минус в том, что логгируется объект Message целиком, и тело сообщения может просто не влезть в максимальную длину записи лога):
logging.level.org.springframework.messaging.handler.HandlerMethod = trace
(Просмотрено 143 раз, 1 раз за сегодня)