From 951d08bd5590f68575d8ba625ad1c03ddb49560b Mon Sep 17 00:00:00 2001 From: minkowp Date: Thu, 8 Aug 2019 16:52:36 +0200 Subject: [PATCH] #1: Logging unhandled exceptions #1 --- .../logging/filter/SpringLoggingFilter.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/pl/piomin/logging/filter/SpringLoggingFilter.java b/src/main/java/pl/piomin/logging/filter/SpringLoggingFilter.java index 035914f..7e62907 100644 --- a/src/main/java/pl/piomin/logging/filter/SpringLoggingFilter.java +++ b/src/main/java/pl/piomin/logging/filter/SpringLoggingFilter.java @@ -51,16 +51,26 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse final SpringResponseWrapper wrappedResponse = new SpringResponseWrapper(response); wrappedResponse.setHeader("X-Request-ID", MDC.get("X-Request-ID")); wrappedResponse.setHeader("X-Correlation-ID", MDC.get("X-Correlation-ID")); - chain.doFilter(wrappedRequest, wrappedResponse); - final long duration = System.currentTimeMillis() - startTime; - if (logHeaders) - LOGGER.info("Response({} ms): status={}, payload={}, headers={}", value("X-Response-Time", duration), - value("X-Response-Status", wrappedResponse.getStatus()), IOUtils.toString(wrappedResponse.getContentAsByteArray(), - wrappedResponse.getCharacterEncoding()), wrappedResponse.getAllHeaders()); - else - LOGGER.info("Response({} ms): status={}, payload={}", value("X-Response-Time", duration), - value("X-Response-Status", wrappedResponse.getStatus()), - IOUtils.toString(wrappedResponse.getContentAsByteArray(), wrappedResponse.getCharacterEncoding())); + try { + chain.doFilter(wrappedRequest, wrappedResponse); + } catch (Exception e) { + logResponse(startTime, wrappedResponse, 500); + throw e; + } + logResponse(startTime, wrappedResponse, wrappedResponse.getStatus()); } } + + private void logResponse(long startTime, SpringResponseWrapper wrappedResponse, int overriddenStatus) throws IOException { + final long duration = System.currentTimeMillis() - startTime; + if (logHeaders) + LOGGER.info("Response({} ms): status={}, payload={}, headers={}", value("X-Response-Time", duration), + value("X-Response-Status", overriddenStatus), IOUtils.toString(wrappedResponse.getContentAsByteArray(), + wrappedResponse.getCharacterEncoding()), wrappedResponse.getAllHeaders()); + else + LOGGER.info("Response({} ms): status={}, payload={}", value("X-Response-Time", duration), + value("X-Response-Status", overriddenStatus), + IOUtils.toString(wrappedResponse.getContentAsByteArray(), wrappedResponse.getCharacterEncoding())); + } + }