This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch CAUSEWAY-3696 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 761830dd0b55f7ea1754b5d38f42a6c2ddea4266 Author: danhaywood <[email protected]> AuthorDate: Tue Mar 12 12:46:03 2024 +0000 CAUSEWAY-3696: don't log ClientAbortExceptions --- .../logonlog/CausewayLogOnExceptionFilter.java | 29 ++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/core/webapp/src/main/java/org/apache/causeway/core/webapp/modules/logonlog/CausewayLogOnExceptionFilter.java b/core/webapp/src/main/java/org/apache/causeway/core/webapp/modules/logonlog/CausewayLogOnExceptionFilter.java index 500efd975e..7376c5bf10 100644 --- a/core/webapp/src/main/java/org/apache/causeway/core/webapp/modules/logonlog/CausewayLogOnExceptionFilter.java +++ b/core/webapp/src/main/java/org/apache/causeway/core/webapp/modules/logonlog/CausewayLogOnExceptionFilter.java @@ -39,12 +39,12 @@ import lombok.val; import lombok.extern.log4j.Log4j2; /** - * Simply logs the URL of any request that causes an exception to be thrown. + * Simply logs the URL of any request that causes an exception to be thrown (but will swallow any + * ClientAbortExceptions, as these represent the end user navigating away without waiting for a response) */ @Log4j2 public class CausewayLogOnExceptionFilter implements Filter { - //@Autowired private ExceptionRecognizerService exceptionRecognizerService; @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -54,12 +54,37 @@ public class CausewayLogOnExceptionFilter implements Filter { public void destroy() { } + /** + * + * eg: + * <pre> + * yyyy-MM-ddT11:37:40.905753834Z + * yyyy-MM-ddT11:37:40.905761428Z org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe + * yyyy-MM-ddT11:37:40.905767047Z at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905772622Z at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:271) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905778518Z at org.apache.catalina.connector.Response.flushBuffer(Response.java:494) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905784572Z at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:256) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905790091Z at org.apache.wicket.protocol.http.servlet.ServletWebResponse.flush(ServletWebResponse.java:315) ~[wicket-core-9.16.0.jar:9.16.0] + * yyyy-MM-ddT11:37:40.905795414Z at org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:98) ~[wicket-core-9.16.0.jar:9.16.0] + * yyyy-MM-ddT11:37:40.905800948Z at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:280) ~[wicket-core-9.16.0.jar:9.16.0] + * yyyy-MM-ddT11:37:40.905806754Z at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:208) ~[wicket-core-9.16.0.jar:9.16.0] + * yyyy-MM-ddT11:37:40.905850671Z at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:307) ~[wicket-core-9.16.0.jar:9.16.0] + * yyyy-MM-ddT11:37:40.905861372Z at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905883937Z at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83] + * yyyy-MM-ddT11:37:40.905886000Z at org.apache.isis.core.webapp.modules.logonlog.IsisLogOnExceptionFilter.doFilter(IsisLogOnExceptionFilter.java:60) + * </pre> + */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { chain.doFilter(request, response); } catch (Exception ex) { + // browser has navigated away. + if(ex.getClass().getCanonicalName().equals("org.apache.catalina.connector.ClientAbortException")) { + return; // don't log or even throw + } + if(ex instanceof IOException) { val url = ((HttpServletRequest) request).getRequestURL().toString(); if(url.endsWith(".css")
