diff --git a/rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareImpl.java b/rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareImpl.java index a3114537709..a8a5cd1ba40 100644 --- a/rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareImpl.java +++ b/rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareImpl.java @@ -109,12 +109,10 @@ public CompletableFuture> invoke(final ApiHttpRequest re requestContext.ifPresent(c -> MDC.setContextMap(c.getValue())); Throwable cause = throwable instanceof CompletionException ? throwable.getCause() : throwable; if (cause instanceof ApiHttpException) { - final ApiHttpResponse errorResponse = ((ApiHttpException) throwable.getCause()) - .getResponse(); + final ApiHttpResponse errorResponse = ((ApiHttpException) cause).getResponse(); final Level level = exceptionLogEvents.entrySet() .stream() - .filter(classLevelEntry -> classLevelEntry.getKey() - .isAssignableFrom(throwable.getCause().getClass())) + .filter(classLevelEntry -> classLevelEntry.getKey().isAssignableFrom(cause.getClass())) .findFirst() .map(Map.Entry::getValue) .orElse(defaultExceptionLogEvent); diff --git a/rmf/rmf-java-base/src/test/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareTest.java b/rmf/rmf-java-base/src/test/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareTest.java index b69ee70ffd8..e620d88ad42 100644 --- a/rmf/rmf-java-base/src/test/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareTest.java +++ b/rmf/rmf-java-base/src/test/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareTest.java @@ -184,6 +184,35 @@ public void testLoggerException() { testLogAppender.stop(); } + @Test + public void testLoggerUnwrappedException() { + + TestLogAppender testLogAppender = new TestLogAppender(); + ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory + .getLogger(Logger.ROOT_LOGGER_NAME); + logger.addAppender(testLogAppender); + testLogAppender.start(); + + final InternalLoggerMiddleware loggerMiddleware = InternalLoggerMiddleware + .of((request, topic) -> new TestLogger(logger)); + + ApiHttpRequest request = new ApiHttpRequest(ApiHttpMethod.GET, URI.create("https://api.commercetools.com/"), + new ApiHttpHeaders(), null); + CompletableFuture> f = new CompletableFuture<>(); + ApiHttpResponse response = new ApiHttpResponse<>(400, new ApiHttpHeaders(), + "".getBytes(StandardCharsets.UTF_8)); + f.completeExceptionally(new ApiHttpException(response.getStatusCode(), response.getBodyAsString().orElse(""), + response.getHeaders(), response)); + loggerMiddleware.invoke(request, apiHttpRequest -> f); + + Assertions.assertThat(testLogAppender.loggingEvents).hasSize(1); + Assertions.assertThat(testLogAppender.loggingEvents.get(0).getLevel()).isEqualTo(Level.ERROR); + Assertions.assertThat(testLogAppender.loggingEvents.get(0).getFormattedMessage()) + .matches("GET https://api.commercetools.com/ 400 \\d+ - -"); + + testLogAppender.stop(); + } + static class TestLogAppender extends AppenderBase { ArrayList loggingEvents = new ArrayList<>(); diff --git a/rmf/rmf-java-base/src/test/resources/logback-test.xml b/rmf/rmf-java-base/src/test/resources/logback-test.xml index 7fafbf8e5d2..056b6592ab5 100644 --- a/rmf/rmf-java-base/src/test/resources/logback-test.xml +++ b/rmf/rmf-java-base/src/test/resources/logback-test.xml @@ -10,6 +10,7 @@ +