You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/01/23 10:41:23 UTC

[07/13] james-project git commit: MAILBOX-376 Structured logging for local mailbox listener execution

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 <bt...@linagora.com>
Authored: Wed Jan 23 14:52:50 2019 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org