From 85c4962065a19c649e8d73fd1316528f483eccb2 Mon Sep 17 00:00:00 2001 From: Martin Dale Lyness Date: Mon, 6 May 2019 09:07:16 -0500 Subject: [PATCH] Use PrepForDeferral on ILoggingEvent To avoid losing MDC context ILoggingEvent has a `prepareForDeferredProcessing` that is supposed to be used in an appender that runs asynchronously. JavaDoc: This method should be called prior to serializing an event. It should also be called when using asynchronous or deferred logging. ... --- .../ch/qos/logback/ext/spring/DelegatingLogbackAppender.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring/src/main/java/ch/qos/logback/ext/spring/DelegatingLogbackAppender.java b/spring/src/main/java/ch/qos/logback/ext/spring/DelegatingLogbackAppender.java index a9038ab..181d470 100644 --- a/spring/src/main/java/ch/qos/logback/ext/spring/DelegatingLogbackAppender.java +++ b/spring/src/main/java/ch/qos/logback/ext/spring/DelegatingLogbackAppender.java @@ -149,6 +149,10 @@ protected void append(ILoggingEvent event) { delegate = appender; } else { //Otherwise, if the ApplicationContext is not ready yet, cache this event and wait + + // make sure MDC and other attributes are captured before deferring + event.prepareForDeferredProcessing(); + cache.put(event); return;