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