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