We're using Spring's SockJS with Stomp to send push messages to the browser. It works fine so far, but when a client (browser) disconnects, we get an ERROR log everytime because the scheduled hearbeat fails:
11:11:18.241 [MessageBroker-1] ERROR [org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler] - Unexpected error occurred in scheduled task. org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='h'; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:339) ~[spring-websocket-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.web.socket.sockjs.transport.session.PollingSockJsSession.writeFrame(PollingSockJsSession.java:82) ~[spring-websocket-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.sendHeartbeat(AbstractSockJsSession.java:255) ~[spring-websocket-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession$HeartbeatTask.run(AbstractSockJsSession.java:451) ~[spring-websocket-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]
But only when the client uses XHR-Polling fallback, websocket doesn't cause any errors. We use nginx as reverse proxy in front of tomcat 8.0.39. Nginx logs 499 (client closed connection) a few seconds before the SockJsTransportFailureException is risen
Is there a way to get rid of the ERROR logs when a heartbeat fails? I don't want to disable all logging from org.springframework.scheduling.support.TaskUtils as we might miss important errors.