You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.6 KiB
41 lines
1.6 KiB
package org.airsonic.player.spring;
|
|
|
|
import org.airsonic.player.util.Util;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.core.Ordered;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.servlet.HandlerExceptionResolver;
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
@Component
|
|
public class LoggingExceptionResolver implements HandlerExceptionResolver, Ordered {
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(LoggingExceptionResolver.class);
|
|
|
|
@Override
|
|
public ModelAndView resolveException(
|
|
HttpServletRequest request, HttpServletResponse response, Object o, Exception e
|
|
) {
|
|
// This happens often and outside of the control of the server, so
|
|
// we catch Tomcat/Jetty "connection aborted by client" exceptions
|
|
// and display a short error message.
|
|
boolean shouldCatch = Util.isInstanceOfClassName(e, "org.apache.catalina.connector.ClientAbortException");
|
|
if (shouldCatch) {
|
|
LOG.info("{}: Client unexpectedly closed connection while loading {} ({})", request.getRemoteAddr(), Util.getAnonymizedURLForRequest(request), e.getCause().toString());
|
|
return null;
|
|
}
|
|
|
|
// Display a full stack trace in all other cases
|
|
LOG.error("{}: An exception occurred while loading {}", request.getRemoteAddr(), Util.getAnonymizedURLForRequest(request), e);
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public int getOrder() {
|
|
return Integer.MIN_VALUE;
|
|
}
|
|
}
|
|
|