MAILBOX-376 Structured logging for InVmEventDelivery

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

Branch: refs/heads/master
Commit: 97b33f80fee5cc5bf33a691d55c3d794c97d1fc8
Parents: 10d49b5
Author: Benoit Tellier <btell...@linagora.com>
Authored: Wed Jan 23 14:57:27 2019 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Wed Jan 23 17:40:01 2019 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/events/EventBus.java   |  1 +
 .../events/delivery/InVmEventDelivery.java      | 36 ++++++++++++--------
 2 files changed, 23 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/97b33f80/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 988edd4..2563fa6 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
@@ -32,6 +32,7 @@ public interface EventBus {
     interface StructuredLoggingFields {
         String EVENT_ID = "eventId";
         String EVENT_CLASS = "eventClass";
+        String LISTENER_CLASS = "listenerClass";
         String USER = "user";
         String GROUP = "group";
         String REGISTRATION_KEYS = "registrationKeys";

http://git-wip-us.apache.org/repos/asf/james-project/blob/97b33f80/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
----------------------------------------------------------------------
diff --git 
a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
 
b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
index ac4ce4e..90ae81f 100644
--- 
a/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
+++ 
b/mailbox/event/event-memory/src/main/java/org/apache/james/mailbox/events/delivery/InVmEventDelivery.java
@@ -19,12 +19,18 @@
 
 package org.apache.james.mailbox.events.delivery;
 
+import java.io.Closeable;
+
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.api.TimeMetric;
+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;
 
@@ -35,15 +41,6 @@ import reactor.core.publisher.MonoProcessor;
 import reactor.core.scheduler.Schedulers;
 
 public class InVmEventDelivery implements EventDelivery {
-
-    private static String listenerName(MailboxListener mailboxListener) {
-        return mailboxListener.getClass().getCanonicalName();
-    }
-
-    private static String eventName(Event event) {
-        return event.getClass().getCanonicalName();
-    }
-
     private static final Logger LOGGER = 
LoggerFactory.getLogger(InVmEventDelivery.class);
 
     private final MetricFactory metricFactory;
@@ -71,10 +68,8 @@ public class InVmEventDelivery implements EventDelivery {
 
     private Mono<Void> deliverByOption(MailboxListener listener, Event event, 
DeliveryOption deliveryOption) {
         Mono<Void> deliveryToListener = Mono.fromRunnable(() -> 
doDeliverToListener(listener, event))
-            .doOnError(throwable -> LOGGER.error("Error while processing 
listener {} for {}",
-                listenerName(listener),
-                eventName(event),
-                throwable))
+            .doOnError(throwable -> structuredLogger(event, listener)
+                .log(logger -> logger.error("Error while processing listener", 
throwable)))
             .subscribeOn(Schedulers.elastic())
             .then();
 
@@ -87,7 +82,13 @@ public class InVmEventDelivery implements EventDelivery {
 
     private void doDeliverToListener(MailboxListener mailboxListener, Event 
event) {
         TimeMetric timer = metricFactory.timer("mailbox-listener-" + 
mailboxListener.getClass().getSimpleName());
-        try {
+        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.LISTENER_CLASS, 
mailboxListener.getClass())
+                .build()) {
+
             mailboxListener.event(event);
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -95,4 +96,11 @@ public class InVmEventDelivery implements EventDelivery {
             timer.stopAndPublish();
         }
     }
+    private StructuredLogger structuredLogger(Event event, MailboxListener 
mailboxListener) {
+        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.LISTENER_CLASS, 
mailboxListener.getClass());
+    }
 }


---------------------------------------------------------------------
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