Логгирование JMS сообщений

Логгирование 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 раз за сегодня)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *