diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java
index 02acf60..f60263b 100644
--- a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java
@@ -79,11 +79,11 @@
         if (servletRequest instanceof HttpServletRequest) {
             HttpServletRequest request = (HttpServletRequest) servletRequest;
             HttpServletResponse response = (HttpServletResponse) servletResponse;
-            logger.info("Starting request {}", request.getRequestURI());
+            logger.trace("Starting request {}", request.getRequestURI());
             try {
-                Enumeration headers = request.getHeaderNames();
+                Enumeration<String> headers = request.getHeaderNames();
                 while (headers.hasMoreElements()) {
-                    String name = (String) headers.nextElement();
+                    String name = headers.nextElement();
                     RequestContextMapping mapping = mappings.getMappingByHeader(name);
                     logger.debug("Got Mapping:{} for Header:{}", mapping, name);
                     if (mapping != null) {
@@ -99,12 +99,17 @@
                         }
                     }
                 }
-                long start = System.nanoTime();
+                long start = 0;
+                if (logger.isTraceEnabled()) {
+                    start = System.nanoTime();
+                }
                 filterChain.doFilter(servletRequest, servletResponse);
-                long elapsed = System.nanoTime() - start;
-                StringBuilder sb = new StringBuilder("Request ").append(request.getRequestURI()).append(" completed in ");
-                ElapsedUtil.addElapsed(elapsed, sb);
-                logger.info(sb.toString());
+                if (logger.isTraceEnabled()) {
+                    long elapsed = System.nanoTime() - start;
+                    StringBuilder sb = new StringBuilder("Request ").append(request.getRequestURI()).append(" completed in ");
+                    ElapsedUtil.addElapsed(elapsed, sb);
+                    logger.trace(sb.toString());
+                }
             } catch (Throwable e) {
                 logger.error("Application cascaded error", e);
                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
diff --git a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHandlerInterceptor.java b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHandlerInterceptor.java
index aed3124..114dbf5 100644
--- a/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHandlerInterceptor.java
+++ b/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHandlerInterceptor.java
@@ -44,10 +44,10 @@
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
-        logger.info("Starting request {}", request.getRequestURI());
-        Enumeration headers = request.getHeaderNames();
+        logger.trace("Starting request {}", request.getRequestURI());
+        Enumeration<String> headers = request.getHeaderNames();
         while (headers.hasMoreElements()) {
-            String name = (String) headers.nextElement();
+            String name = headers.nextElement();
             RequestContextMapping mapping = mappings.getMappingByHeader(name);
             logger.debug("Got Mapping:{} for Header:{}", mapping, name);
             if (mapping != null) {
@@ -63,17 +63,21 @@
                 }
             }
         }
-        startTime.set(System.nanoTime());
+        if (logger.isTraceEnabled()) {
+            startTime.set(System.nanoTime());
+        }
         return true;
     }
 
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
-        long elapsed = System.nanoTime() - startTime.get();
-        StringBuilder sb = new StringBuilder("Request ").append(request.getRequestURI()).append(" completed in ");
-        ElapsedUtil.addElapsed(elapsed, sb);
-        logger.info(sb.toString());
-        startTime.remove();
+        if (logger.isTraceEnabled()) {
+            long elapsed = System.nanoTime() - startTime.get();
+            StringBuilder sb = new StringBuilder("Request ").append(request.getRequestURI()).append(" completed in ");
+            ElapsedUtil.addElapsed(elapsed, sb);
+            logger.trace(sb.toString());
+            startTime.remove();
+        }
     }
 
     @Override
