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:28 UTC

[12/13] james-project git commit: MAILBOX-376 Structured logging for key registrations

MAILBOX-376 Structured logging for key registrations


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

Branch: refs/heads/master
Commit: dbc5442762bde9a07597b2667e629c5af612da7f
Parents: a25a1c6
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 23 14:42:40 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 23 17:40:01 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/events/EventBus.java   |  1 +
 .../mailbox/events/KeyRegistrationHandler.java  | 28 ++++++++++++++++++--
 2 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/dbc54427/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
index b05db0f..988edd4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
@@ -35,6 +35,7 @@ public interface EventBus {
         String USER = "user";
         String GROUP = "group";
         String REGISTRATION_KEYS = "registrationKeys";
+        String REGISTRATION_KEY = "registrationKey";
     }
 
     Registration register(MailboxListener listener, RegistrationKey key);

http://git-wip-us.apache.org/repos/asf/james-project/blob/dbc54427/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/KeyRegistrationHandler.java
----------------------------------------------------------------------
diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/KeyRegistrationHandler.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/KeyRegistrationHandler.java
index 34e5189..b12e5b4 100644
--- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/KeyRegistrationHandler.java
+++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/KeyRegistrationHandler.java
@@ -25,12 +25,16 @@ import static org.apache.james.backend.rabbitmq.Constants.EXCLUSIVE;
 import static org.apache.james.backend.rabbitmq.Constants.NO_ARGUMENTS;
 import static org.apache.james.mailbox.events.RabbitMQEventBus.EVENT_BUS_ID;
 
+import java.io.Closeable;
 import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 
 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;
 import org.slf4j.LoggerFactory;
 
@@ -119,14 +123,26 @@ class KeyRegistrationHandler {
 
         return mailboxListenerRegistry.getLocalMailboxListeners(registrationKey)
             .filter(listener -> !isLocalSynchronousListeners(eventBusId, listener))
-            .flatMap(listener -> Mono.fromRunnable(Throwing.runnable(() -> listener.event(event)))
-                .doOnError(e -> LOGGER.error("Exception happens when handling event of user {}", event.getUser().asString(), e))
+            .flatMap(listener -> Mono.fromRunnable(Throwing.runnable(() -> executeListener(listener, event, registrationKey)))
+                .doOnError(e -> structuredLogger(event, registrationKey)
+                    .log(logger -> logger.error("Exception happens when handling event", e)))
                 .onErrorResume(e -> Mono.empty())
                 .then())
             .subscribeOn(Schedulers.elastic())
             .then();
     }
 
+    private void executeListener(MailboxListener listener, Event event, RegistrationKey key) 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, key)
+                .build()) {
+            listener.event(event);
+        }
+    }
+
     private boolean isLocalSynchronousListeners(EventBusId eventBusId, MailboxListener listener) {
         return eventBusId.equals(this.eventBusId) &&
             listener.getExecutionMode().equals(MailboxListener.ExecutionMode.SYNCHRONOUS);
@@ -135,4 +151,12 @@ class KeyRegistrationHandler {
     private Event toEvent(Delivery delivery) {
         return eventSerializer.fromJson(new String(delivery.getBody(), StandardCharsets.UTF_8)).get();
     }
+
+    private StructuredLogger structuredLogger(Event event, RegistrationKey key) {
+        return MDCStructuredLogger.forLogger(LOGGER)
+            .addField(EventBus.StructuredLoggingFields.EVENT_ID, event.getEventId())
+            .addField(EventBus.StructuredLoggingFields.EVENT_CLASS, event.getClass())
+            .addField(EventBus.StructuredLoggingFields.USER, event.getUser())
+            .addField(EventBus.StructuredLoggingFields.REGISTRATION_KEY, key);
+    }
 }


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