From 7ea612beafeb2d76abc7933dfac811dd5ee9385a Mon Sep 17 00:00:00 2001 From: Peter Jurkovic Date: Wed, 14 Aug 2019 10:17:34 +0100 Subject: [PATCH 1/2] Make logError() in AbstractErrorWebExceptionHandler overrideable See gh-17863 --- .../AbstractErrorWebExceptionHandler.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java index bfc411ee15..f8cdbe03be 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java @@ -263,17 +263,7 @@ public abstract class AbstractErrorWebExceptionHandler implements ErrorWebExcept .flatMap((response) -> write(exchange, response)); } - private boolean isDisconnectedClientError(Throwable ex) { - return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName()) - || isDisconnectedClientErrorMessage(NestedExceptionUtils.getMostSpecificCause(ex).getMessage()); - } - - private boolean isDisconnectedClientErrorMessage(String message) { - message = (message != null) ? message.toLowerCase() : ""; - return (message.contains("broken pipe") || message.contains("connection reset by peer")); - } - - private void logError(ServerRequest request, ServerResponse response, Throwable throwable) { + protected void logError(ServerRequest request, ServerResponse response, Throwable throwable) { if (logger.isDebugEnabled()) { logger.debug(request.exchange().getLogPrefix() + formatError(throwable, request)); } @@ -284,6 +274,16 @@ public abstract class AbstractErrorWebExceptionHandler implements ErrorWebExcept } } + private boolean isDisconnectedClientError(Throwable ex) { + return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName()) + || isDisconnectedClientErrorMessage(NestedExceptionUtils.getMostSpecificCause(ex).getMessage()); + } + + private boolean isDisconnectedClientErrorMessage(String message) { + message = (message != null) ? message.toLowerCase() : ""; + return (message.contains("broken pipe") || message.contains("connection reset by peer")); + } + private String formatError(Throwable ex, ServerRequest request) { String reason = ex.getClass().getSimpleName() + ": " + ex.getMessage(); return "Resolved [" + reason + "] for HTTP " + request.methodName() + " " + request.path(); From 6328f2e8a88850c8c79d353c823057b6c7b9ed4c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 5 Sep 2019 21:08:53 +0100 Subject: [PATCH 2/2] Polish "Make logError() in AbstractErrorWebExceptionHandler overrideable" See gh-17863 --- .../AbstractErrorWebExceptionHandler.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java index f8cdbe03be..812929801e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/error/AbstractErrorWebExceptionHandler.java @@ -263,6 +263,25 @@ public abstract class AbstractErrorWebExceptionHandler implements ErrorWebExcept .flatMap((response) -> write(exchange, response)); } + private boolean isDisconnectedClientError(Throwable ex) { + return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName()) + || isDisconnectedClientErrorMessage(NestedExceptionUtils.getMostSpecificCause(ex).getMessage()); + } + + private boolean isDisconnectedClientErrorMessage(String message) { + message = (message != null) ? message.toLowerCase() : ""; + return (message.contains("broken pipe") || message.contains("connection reset by peer")); + } + + /** + * Logs the {@code throwable} error for the given {@code request} and {@code response} + * exchange. The default implementation logs all errors at debug level. Additionally, + * any internal server error (500) is logged at error level. + * @param request the request that was being handled + * @param response the response that was being sent + * @param throwable the error to be logged + * @since 2.2.0 + */ protected void logError(ServerRequest request, ServerResponse response, Throwable throwable) { if (logger.isDebugEnabled()) { logger.debug(request.exchange().getLogPrefix() + formatError(throwable, request)); @@ -274,16 +293,6 @@ public abstract class AbstractErrorWebExceptionHandler implements ErrorWebExcept } } - private boolean isDisconnectedClientError(Throwable ex) { - return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName()) - || isDisconnectedClientErrorMessage(NestedExceptionUtils.getMostSpecificCause(ex).getMessage()); - } - - private boolean isDisconnectedClientErrorMessage(String message) { - message = (message != null) ? message.toLowerCase() : ""; - return (message.contains("broken pipe") || message.contains("connection reset by peer")); - } - private String formatError(Throwable ex, ServerRequest request) { String reason = ex.getClass().getSimpleName() + ": " + ex.getMessage(); return "Resolved [" + reason + "] for HTTP " + request.methodName() + " " + request.path();