diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java index 738f5961d386..8d01db3e95a2 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java @@ -334,7 +334,7 @@ protected void publishBrokerAvailableEvent() { boolean shouldPublish = this.brokerAvailable.compareAndSet(false, true); if (this.eventPublisher != null && shouldPublish) { if (logger.isInfoEnabled()) { - logger.info(this.availableEvent); + logger.info(this.availableEvent.toString()); } this.eventPublisher.publishEvent(this.availableEvent); } @@ -344,7 +344,7 @@ protected void publishBrokerUnavailableEvent() { boolean shouldPublish = this.brokerAvailable.compareAndSet(true, false); if (this.eventPublisher != null && shouldPublish) { if (logger.isInfoEnabled()) { - logger.info(this.notAvailableEvent); + logger.info(this.notAvailableEvent.toString()); } this.eventPublisher.publishEvent(this.notAvailableEvent); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/BrokerMessageHandlerTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/BrokerMessageHandlerTests.java index 0fc18cf34b02..4ec71b04658b 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/BrokerMessageHandlerTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/BrokerMessageHandlerTests.java @@ -16,12 +16,15 @@ package org.springframework.messaging.simp.broker; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import org.apache.commons.logging.Log; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEventPublisher; @@ -30,9 +33,13 @@ import org.springframework.messaging.simp.SimpMessageType; import org.springframework.messaging.support.GenericMessage; import org.springframework.messaging.support.MessageBuilder; +import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * Tests for {@link org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler}. @@ -112,6 +119,22 @@ void publishBrokerUnavailableEventWhenAlreadyUnavailable() { assertThat(this.handler.availabilityEvents).isEqualTo(Arrays.asList(true, false)); } + @Test + void publishBrokerAvailabilityEventsLogStringMessages() { + Log logger = mock(); + when(logger.isInfoEnabled()).thenReturn(true); + this.handler.setLogger(logger); + + this.handler.publishBrokerAvailableEvent(); + this.handler.publishBrokerUnavailableEvent(); + + ArgumentCaptor messageCaptor = ArgumentCaptor.forClass(Object.class); + verify(logger, times(2)).info(messageCaptor.capture()); + assertThat(messageCaptor.getAllValues()).containsExactly( + "BrokerAvailabilityEvent[available=true, " + this.handler + "]", + "BrokerAvailabilityEvent[available=false, " + this.handler + "]"); + } + @Test void checkDestination() { TestBrokerMessageHandler theHandler = new TestBrokerMessageHandler("/topic"); @@ -168,6 +191,13 @@ private static class TestBrokerMessageHandler extends AbstractBrokerMessageHandl setApplicationEventPublisher(this); } + void setLogger(Log logger) { + Field field = ReflectionUtils.findField(AbstractBrokerMessageHandler.class, "logger"); + assertThat(field).isNotNull(); + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field, this, logger); + } + @Override protected void handleMessageInternal(Message message) { String destination = (String) message.getHeaders().get(SimpMessageHeaderAccessor.DESTINATION_HEADER);