Further refine logging in StompErrorHandler

In 5.3.x and forward, completely avoid logging unsent CONNECT messages
that are most likely authentication issues before the session is even
established.

Closes gh-26026
This commit is contained in:
Rossen Stoyanchev
2020-11-05 21:50:12 +00:00
parent 17dd7785f6
commit bcd2b9a8a7

View File

@@ -269,13 +269,15 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
} }
for (Message<byte[]> message : messages) { for (Message<byte[]> message : messages) {
try { StompHeaderAccessor headerAccessor =
StompHeaderAccessor headerAccessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); Assert.state(headerAccessor != null, "No StompHeaderAccessor");
Assert.state(headerAccessor != null, "No StompHeaderAccessor");
StompCommand command = headerAccessor.getCommand(); StompCommand command = headerAccessor.getCommand();
boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command); boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command);
boolean sent = false;
try {
headerAccessor.setSessionId(session.getId()); headerAccessor.setSessionId(session.getId());
headerAccessor.setSessionAttributes(session.getAttributes()); headerAccessor.setSessionAttributes(session.getAttributes());
@@ -305,7 +307,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
try { try {
SimpAttributesContextHolder.setAttributesFromMessage(message); SimpAttributesContextHolder.setAttributesFromMessage(message);
boolean sent = outputChannel.send(message); sent = outputChannel.send(message);
if (sent) { if (sent) {
if (this.eventPublisher != null) { if (this.eventPublisher != null) {
@@ -327,13 +329,14 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
} }
} }
catch (Throwable ex) { catch (Throwable ex) {
if (logger.isErrorEnabled()) { if (logger.isDebugEnabled()) {
String errorText = "Failed to send message to MessageChannel in session " + session.getId(); logger.debug("Failed to send message to MessageChannel in session " + session.getId(), ex);
if (logger.isDebugEnabled()) { }
logger.debug(errorText, ex); else if (logger.isErrorEnabled()) {
} // Skip unsent CONNECT messages (likely auth issues)
else { if (!isConnect || sent) {
logger.error(errorText + ":" + ex.getMessage()); logger.error("Failed to send message to MessageChannel in session " + session.getId() +
":" + ex.getMessage());
} }
} }
handleError(session, ex, message); handleError(session, ex, message);