You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/01/23 10:41:23 UTC
[07/13] james-project git commit: MAILBOX-376 Structured logging for
local mailbox listener execution
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 <bt...@linagora.com>
Authored: Wed Jan 23 14:52:50 2019 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org