From 2d478f7d9b7afa47e625a19a4f27a3b63b6f434f Mon Sep 17 00:00:00 2001 From: kodacme Date: Sun, 31 May 2026 00:48:12 +0900 Subject: [PATCH] Log broker availability events as String messages Prior to this commit, AbstractBrokerMessageHandler logged the BrokerAvailabilityEvent object directly at INFO level. With a structured JSON logging layout, the event could be serialized as an object rather than via toString(), causing the layout to traverse the event source (a SimpleBrokerMessageHandler) object graph. That graph contains a cyclic reference through the client inbound channel executor's thread factory, which fails serialization at the maximum nesting depth. This commit logs the event's toString() representation instead, keeping the same operational signal while preventing structured logging layouts from traversing framework internals. Signed-off-by: kodacme --- .../messaging/simp/broker/AbstractBrokerMessageHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 738f5961d38..8d01db3e95a 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 @@ public abstract class AbstractBrokerMessageHandler 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 @@ public abstract class AbstractBrokerMessageHandler 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); }