MAILBOX-376 Structured logging for event dispatching

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

Branch: refs/heads/master
Commit: a25a1c66c0ce96aa3840e7a987cdd6920e9f0a2c
Parents: e3072f2
Author: Benoit Tellier <[email protected]>
Authored: Wed Jan 23 14:38:21 2019 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Wed Jan 23 17:40:01 2019 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/events/EventBus.java |  1 +
 .../apache/james/mailbox/events/EventDispatcher.java   | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a25a1c66/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 9a8987a..b05db0f 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
@@ -34,6 +34,7 @@ public interface EventBus {
         String EVENT_CLASS = "eventClass";
         String USER = "user";
         String GROUP = "group";
+        String REGISTRATION_KEYS = "registrationKeys";
     }
 
     Registration register(MailboxListener listener, RegistrationKey key);

http://git-wip-us.apache.org/repos/asf/james-project/blob/a25a1c66/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 01ea139..42b32d7 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
@@ -30,6 +30,8 @@ import java.util.Set;
 import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.util.MDCStructuredLogger;
+import org.apache.james.util.StructuredLogger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -75,7 +77,8 @@ class EventDispatcher {
             .flatMap(mailboxListenerRegistry::getLocalMailboxListeners)
             .filter(mailboxListener -> 
mailboxListener.getExecutionMode().equals(MailboxListener.ExecutionMode.SYNCHRONOUS))
             .flatMap(mailboxListener -> Mono.fromRunnable(Throwing.runnable(() 
-> mailboxListener.event(event)))
-                .doOnError(e -> LOGGER.error("Exception happens when handling 
event of user {}", event.getUser().asString(), e))
+                .doOnError(e -> structuredLogger(event, keys)
+                    .log(logger -> logger.error("Exception happens when 
dispatching event of user {}", event.getUser().asString(), e)))
                 .onErrorResume(e -> Mono.empty()))
             .then();
 
@@ -90,6 +93,14 @@ class EventDispatcher {
             .subscribeWith(MonoProcessor.create());
     }
 
+    private StructuredLogger structuredLogger(Event event, 
Set<RegistrationKey> keys) {
+        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_KEYS, 
keys);
+    }
+
     private Mono<Void> doDispatch(Mono<byte[]> serializedEvent, 
Set<RegistrationKey> keys) {
         Flux<RoutingKeyConverter.RoutingKey> routingKeys = Flux.concat(
             Mono.just(RoutingKeyConverter.RoutingKey.empty()),


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to