From 28f94c19da9e0f32c1f14b51a296e79cb60279f7 Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Fri, 20 Jun 2025 08:48:26 +0200 Subject: [PATCH 1/2] fix logger for unwrapped exceptions --- .../rmf/base/client/http/InternalLoggerMiddlewareImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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..89366138638 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,8 +109,7 @@ 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() From f8e090337dbe1de1c6a69b7fd047d1371f9b3ad4 Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Fri, 20 Jun 2025 08:56:59 +0200 Subject: [PATCH 2/2] fix logger for unwrapped exceptions add test for unwrapped exceptions logging --- .../http/InternalLoggerMiddlewareImpl.java | 3 +- .../http/InternalLoggerMiddlewareTest.java | 29 +++++++++++++++++++ .../src/test/resources/logback-test.xml | 1 + 3 files changed, 31 insertions(+), 2 deletions(-) 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 89366138638..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 @@ -112,8 +112,7 @@ public CompletableFuture> invoke(final ApiHttpRequest re 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 @@ +