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