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:28 UTC
[12/13] james-project git commit: MAILBOX-376 Structured logging for
key registrations
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 <bt...@linagora.com>
Authored: Wed Jan 23 14:42:40 2019 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org