From 1621125ccf183412280293bff9523e06c44d1e58 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 18 Oct 2018 22:22:04 -0400 Subject: [PATCH] @ExceptionHandler methods logs at DEBUG level again Issue: SPR-17383 --- .../AbstractHandlerExceptionResolver.java | 25 ++++++++++++++++--- .../ExceptionHandlerExceptionResolver.java | 6 +++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java index d4f68f8a60..16356608f9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java @@ -135,11 +135,18 @@ public abstract class AbstractHandlerExceptionResolver implements HandlerExcepti prepareResponse(ex, response); ModelAndView result = doResolveException(request, response, handler, ex); if (result != null) { - // Print warn message when warn logger is not enabled... - if (logger.isWarnEnabled() && (this.warnLogger == null || !this.warnLogger.isWarnEnabled())) { - logger.warn("Resolved [" + ex + "]" + (result.isEmpty() ? "" : " to " + result)); + // Print warn or debug message when warn logger is not enabled... + if (this.warnLogger == null || !this.warnLogger.isWarnEnabled()) { + if (!useWarnLevelWhenWarnLoggerNotEnabled()) { + if (logger.isDebugEnabled()) { + logger.debug("Resolved [" + ex + "]" + (result.isEmpty() ? "" : " to " + result)); + } + } + else if (logger.isWarnEnabled()) { + logger.warn("Resolved [" + ex + "]" + (result.isEmpty() ? "" : " to " + result)); + } } - // warnLogger with full stack trace (requires explicit config) + // Log with warnLogger (requires explicit config) logException(ex, request); } return result; @@ -179,6 +186,16 @@ public abstract class AbstractHandlerExceptionResolver implements HandlerExcepti return (this.mappedHandlers == null && this.mappedHandlerClasses == null); } + /** + * Whether to log warn level messages (return value "true") or debug level + * messages (return value "false") through the regular class logger when + * {@link #setWarnLogCategory warn logging} is not activated. + *

By default returns "true". + */ + protected boolean useWarnLevelWhenWarnLoggerNotEnabled() { + return true; + } + /** * Log the given exception at warn level, provided that warn logging has been * activated through the {@link #setWarnLogCategory "warnLogCategory"} property. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java index 09e4c7b6f2..602e75df6a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java @@ -491,4 +491,10 @@ public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExce return null; } + @Override + protected boolean useWarnLevelWhenWarnLoggerNotEnabled() { + // Use DEBUG level + return false; + } + }