Логгирование 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 |
(Просмотрено 186 раз, 1 раз за сегодня)