MAILBOX-376 Structured logging for local mailbox listener execution

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/10d49b51
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/10d49b51
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/10d49b51

Branch: refs/heads/master
Commit: 10d49b512152e9626022b89964e2fb60d4262f1b
Parents: dbc5442
Author: Benoit Tellier <btell...@linagora.com>
Authored: Wed Jan 23 14:52:50 2019 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Wed Jan 23 17:40:01 2019 +0700

----------------------------------------------------------------------
 .../james/mailbox/events/EventDispatcher.java   | 23 ++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/10d49b51/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/EventDispatcher.java
----------------------------------------------------------------------
diff --git 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/EventDispatcher.java
 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/EventDispatcher.java
index 42b32d7..1331e29 100644
--- 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/EventDispatcher.java
+++ 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/EventDispatcher.java
@@ -24,12 +24,15 @@ import static 
org.apache.james.backend.rabbitmq.Constants.DURABLE;
 import static org.apache.james.mailbox.events.RabbitMQEventBus.EVENT_BUS_ID;
 import static 
org.apache.james.mailbox.events.RabbitMQEventBus.MAILBOX_EVENT_EXCHANGE_NAME;
 
+import java.io.Closeable;
 import java.nio.charset.StandardCharsets;
 import java.util.Set;
 
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.util.MDCBuilder;
 import org.apache.james.util.MDCStructuredLogger;
 import org.apache.james.util.StructuredLogger;
 import org.slf4j.Logger;
@@ -74,11 +77,12 @@ class EventDispatcher {
     Mono<Void> dispatch(Event event, Set<RegistrationKey> keys) {
         Mono<Void> localListenerDelivery = Flux.fromIterable(keys)
             .subscribeOn(Schedulers.elastic())
-            .flatMap(mailboxListenerRegistry::getLocalMailboxListeners)
-            .filter(mailboxListener -> 
mailboxListener.getExecutionMode().equals(MailboxListener.ExecutionMode.SYNCHRONOUS))
-            .flatMap(mailboxListener -> Mono.fromRunnable(Throwing.runnable(() 
-> mailboxListener.event(event)))
+            .flatMap(key -> 
mailboxListenerRegistry.getLocalMailboxListeners(key)
+                .map(listener -> Pair.of(key, listener)))
+            .filter(pair -> 
pair.getRight().getExecutionMode().equals(MailboxListener.ExecutionMode.SYNCHRONOUS))
+            .flatMap(pair -> Mono.fromRunnable(Throwing.runnable(() -> 
executeListener(event, pair.getRight(), pair.getLeft())))
                 .doOnError(e -> structuredLogger(event, keys)
-                    .log(logger -> logger.error("Exception happens when 
dispatching event of user {}", event.getUser().asString(), e)))
+                    .log(logger -> logger.error("Exception happens when 
dispatching event", e)))
                 .onErrorResume(e -> Mono.empty()))
             .then();
 
@@ -93,6 +97,17 @@ class EventDispatcher {
             .subscribeWith(MonoProcessor.create());
     }
 
+    private void executeListener(Event event, MailboxListener mailboxListener, 
RegistrationKey registrationKey) throws Exception {
+        try (Closeable mdc = MDCBuilder.create()
+                .addContext(EventBus.StructuredLoggingFields.EVENT_ID, 
event.getEventId())
+                .addContext(EventBus.StructuredLoggingFields.EVENT_CLASS, 
event.getClass())
+                .addContext(EventBus.StructuredLoggingFields.USER, 
event.getUser())
+                .addContext(EventBus.StructuredLoggingFields.REGISTRATION_KEY, 
registrationKey)
+                .build()) {
+            mailboxListener.event(event);
+        }
+    }
+
     private StructuredLogger structuredLogger(Event event, 
Set<RegistrationKey> keys) {
         return MDCStructuredLogger.forLogger(LOGGER)
             .addField(EventBus.StructuredLoggingFields.EVENT_ID, 
event.getEventId())


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to