From d4dac250a835c54428d6f1e29f8fe8eaec59330e Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 20 Jan 2015 16:01:53 +0100 Subject: [PATCH] AbstractRequestLoggingFilter allows for dedicated shouldLog check in CommonsRequestLoggingFilter Issue: SPR-12609 --- .../filter/AbstractRequestLoggingFilter.java | 23 ++++++++++++++++--- .../filter/CommonsRequestLoggingFilter.java | 16 +++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java index 1e3765af6f..2e206f2d4e 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/AbstractRequestLoggingFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -211,14 +211,15 @@ public abstract class AbstractRequestLoggingFilter extends OncePerRequestFilter requestToUse = new ContentCachingRequestWrapper(request); } - if (isFirstRequest) { + boolean shouldLog = shouldLog(requestToUse); + if (shouldLog && isFirstRequest) { beforeRequest(requestToUse, getBeforeMessage(requestToUse)); } try { filterChain.doFilter(requestToUse, response); } finally { - if (!isAsyncStarted(requestToUse)) { + if (shouldLog && !isAsyncStarted(requestToUse)) { afterRequest(requestToUse, getAfterMessage(requestToUse)); } } @@ -289,6 +290,22 @@ public abstract class AbstractRequestLoggingFilter extends OncePerRequestFilter return msg.toString(); } + + /** + * Determine whether to call the {@link #beforeRequest}/{@link #afterRequest} + * methods for the current request, i.e. whether logging is currently active + * (and the log message is worth building). + *

The default implementation always returns {@code true}. Subclasses may + * override this with a log level check. + * @param request current HTTP request + * @return {@code true} if the before/after method should get called; + * {@code false} otherwise + * @since 4.1.5 + */ + protected boolean shouldLog(HttpServletRequest request) { + return true; + } + /** * Concrete subclasses should implement this method to write a log message * before the request is processed. diff --git a/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java b/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java index 191a510fbf..608a46c6bd 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/CommonsRequestLoggingFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2005 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletRequest; * (and optionally the query string) to the Commons Log. * * @author Rob Harrop + * @author Juergen Hoeller * @since 1.2.5 * @see #setIncludeQueryString * @see #setBeforeMessagePrefix @@ -33,14 +34,17 @@ import javax.servlet.http.HttpServletRequest; */ public class CommonsRequestLoggingFilter extends AbstractRequestLoggingFilter { + @Override + protected boolean shouldLog(HttpServletRequest request) { + return logger.isDebugEnabled(); + } + /** * Writes a log message before the request is processed. */ @Override protected void beforeRequest(HttpServletRequest request, String message) { - if (logger.isDebugEnabled()) { - logger.debug(message); - } + logger.debug(message); } /** @@ -48,9 +52,7 @@ public class CommonsRequestLoggingFilter extends AbstractRequestLoggingFilter { */ @Override protected void afterRequest(HttpServletRequest request, String message) { - if (logger.isDebugEnabled()) { - logger.debug(message); - } + logger.debug(message); } }