Skip to content

Commit 8a87245

Browse files
Merge pull request #927 from commercetools/logger-fix
Fix Logger with unwrapped CompletionExceptions
2 parents e04921d + f8e0903 commit 8a87245

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,10 @@ public CompletableFuture<ApiHttpResponse<byte[]>> invoke(final ApiHttpRequest re
109109
requestContext.ifPresent(c -> MDC.setContextMap(c.getValue()));
110110
Throwable cause = throwable instanceof CompletionException ? throwable.getCause() : throwable;
111111
if (cause instanceof ApiHttpException) {
112-
final ApiHttpResponse<byte[]> errorResponse = ((ApiHttpException) throwable.getCause())
113-
.getResponse();
112+
final ApiHttpResponse<byte[]> errorResponse = ((ApiHttpException) cause).getResponse();
114113
final Level level = exceptionLogEvents.entrySet()
115114
.stream()
116-
.filter(classLevelEntry -> classLevelEntry.getKey()
117-
.isAssignableFrom(throwable.getCause().getClass()))
115+
.filter(classLevelEntry -> classLevelEntry.getKey().isAssignableFrom(cause.getClass()))
118116
.findFirst()
119117
.map(Map.Entry::getValue)
120118
.orElse(defaultExceptionLogEvent);

rmf/rmf-java-base/src/test/java/io/vrap/rmf/base/client/http/InternalLoggerMiddlewareTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,35 @@ public void testLoggerException() {
184184
testLogAppender.stop();
185185
}
186186

187+
@Test
188+
public void testLoggerUnwrappedException() {
189+
190+
TestLogAppender testLogAppender = new TestLogAppender();
191+
ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory
192+
.getLogger(Logger.ROOT_LOGGER_NAME);
193+
logger.addAppender(testLogAppender);
194+
testLogAppender.start();
195+
196+
final InternalLoggerMiddleware loggerMiddleware = InternalLoggerMiddleware
197+
.of((request, topic) -> new TestLogger(logger));
198+
199+
ApiHttpRequest request = new ApiHttpRequest(ApiHttpMethod.GET, URI.create("https://api.commercetools.com/"),
200+
new ApiHttpHeaders(), null);
201+
CompletableFuture<ApiHttpResponse<byte[]>> f = new CompletableFuture<>();
202+
ApiHttpResponse<byte[]> response = new ApiHttpResponse<>(400, new ApiHttpHeaders(),
203+
"".getBytes(StandardCharsets.UTF_8));
204+
f.completeExceptionally(new ApiHttpException(response.getStatusCode(), response.getBodyAsString().orElse(""),
205+
response.getHeaders(), response));
206+
loggerMiddleware.invoke(request, apiHttpRequest -> f);
207+
208+
Assertions.assertThat(testLogAppender.loggingEvents).hasSize(1);
209+
Assertions.assertThat(testLogAppender.loggingEvents.get(0).getLevel()).isEqualTo(Level.ERROR);
210+
Assertions.assertThat(testLogAppender.loggingEvents.get(0).getFormattedMessage())
211+
.matches("GET https://api.commercetools.com/ 400 \\d+ - -");
212+
213+
testLogAppender.stop();
214+
}
215+
187216
static class TestLogAppender extends AppenderBase<ILoggingEvent> {
188217
ArrayList<ILoggingEvent> loggingEvents = new ArrayList<>();
189218

rmf/rmf-java-base/src/test/resources/logback-test.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</appender>
1111

1212
<logger name="commercetools" level="INFO"/>
13+
<logger name="org.reflections.Reflections" level="WARN" />
1314

1415
<root level="INFO">
1516
<appender-ref ref="STDOUT" />

0 commit comments

Comments
 (0)