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/05/10 03:27:03 UTC

[james-project] 02/07: JAMES-2233 Correlate request and response logging using a requestId

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 5e0baaa48b351594b65bfd635a9d38c401483fa5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 7 10:38:04 2019 +0700

    JAMES-2233 Correlate request and response logging using a requestId
---
 .../james/webadmin/mdc/LoggingRequestFilter.java   |  6 ++
 .../james/webadmin/mdc/LoggingResponseFilter.java  |  4 ++
 .../{LoggingRequestFilter.java => RequestId.java}  | 67 ++++++++++++++--------
 .../apache/james/webadmin/mdc/RequestIdTest.java}  | 36 +++---------
 4 files changed, 60 insertions(+), 53 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
index fac1e90..32ef13e 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
@@ -38,10 +38,16 @@ public class LoggingRequestFilter implements Filter {
     static final String ENDPOINT = "endpoint";
     static final String QUERY_PARAMETERS = "queryParameters";
     static final String IP = "ip";
+    static final String REQUEST_ID = "requestId";
 
     @Override
     public void handle(Request request, Response response) {
+        RequestId requestId = RequestId.random();
+
+        request.attribute(REQUEST_ID, requestId);
+
         MDCStructuredLogger.forLogger(LOGGER)
+            .addField(REQUEST_ID, requestId.asString())
             .addField(IP, request.ip())
             .addField(ENDPOINT, request.url())
             .addField(METHOD, request.requestMethod())
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java
index cffc7a5..39b99a9 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java
@@ -24,6 +24,7 @@ import static org.apache.james.webadmin.mdc.LoggingRequestFilter.ENDPOINT;
 import static org.apache.james.webadmin.mdc.LoggingRequestFilter.IP;
 import static org.apache.james.webadmin.mdc.LoggingRequestFilter.METHOD;
 import static org.apache.james.webadmin.mdc.LoggingRequestFilter.QUERY_PARAMETERS;
+import static org.apache.james.webadmin.mdc.LoggingRequestFilter.REQUEST_ID;
 
 import org.apache.james.util.MDCStructuredLogger;
 import org.slf4j.Logger;
@@ -42,7 +43,10 @@ public class LoggingResponseFilter implements Filter {
 
     @Override
     public void handle(Request request, Response response) {
+        RequestId requestId = request.attribute(REQUEST_ID);
+
         MDCStructuredLogger.forLogger(LOGGER)
+            .addField(REQUEST_ID, requestId.asString())
             .addField(IP, request.ip())
             .addField(ENDPOINT, request.url())
             .addField(METHOD, request.requestMethod())
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestId.java
similarity index 51%
copy from server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
copy to server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestId.java
index fac1e90..e85e130 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestId.java
@@ -19,35 +19,54 @@
 
 package org.apache.james.webadmin.mdc;
 
-import static org.apache.james.webadmin.authentication.AuthenticationFilter.LOGIN;
+import java.util.Objects;
+import java.util.UUID;
 
-import org.apache.james.util.MDCStructuredLogger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.google.common.base.Preconditions;
 
-import com.google.common.collect.ImmutableSet;
+public class RequestId {
+    public static RequestId random() {
+        return of(UUID.randomUUID());
+    }
+
+    public static RequestId of(UUID uuid) {
+        Preconditions.checkNotNull(uuid, "'uuid' can not be null");
+
+        return new RequestId(uuid);
+    }
+
+    public static RequestId of(String uuid) {
+        Preconditions.checkNotNull(uuid, "'uuid' can not be null");
+
+        return new RequestId(UUID.fromString(uuid));
+    }
+
+    private final UUID uuid;
 
-import spark.Filter;
-import spark.Request;
-import spark.Response;
+    private RequestId(UUID uuid) {
+        this.uuid = uuid;
+    }
+
+    public UUID getUuid() {
+        return uuid;
+    }
+
+    public String asString() {
+        return uuid.toString();
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof RequestId) {
+            RequestId requestId = (RequestId) o;
 
-public class LoggingRequestFilter implements Filter {
-    private static final Logger LOGGER = LoggerFactory.getLogger(LoggingRequestFilter.class);
-    static final String REQUEST_BODY = "request-body";
-    static final String METHOD = "method";
-    static final String ENDPOINT = "endpoint";
-    static final String QUERY_PARAMETERS = "queryParameters";
-    static final String IP = "ip";
+            return Objects.equals(this.uuid, requestId.uuid);
+        }
+        return false;
+    }
 
     @Override
-    public void handle(Request request, Response response) {
-        MDCStructuredLogger.forLogger(LOGGER)
-            .addField(IP, request.ip())
-            .addField(ENDPOINT, request.url())
-            .addField(METHOD, request.requestMethod())
-            .addField(LOGIN, request.attribute(LOGIN))
-            .addField(QUERY_PARAMETERS, ImmutableSet.copyOf(request.queryParams()))
-            .addField(REQUEST_BODY, request.body())
-            .log(logger -> logger.info("WebAdmin request received"));
+    public final int hashCode() {
+        return Objects.hash(uuid);
     }
 }
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/mdc/RequestIdTest.java
similarity index 50%
copy from server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
copy to server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/mdc/RequestIdTest.java
index fac1e90..0eaad31 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/mdc/RequestIdTest.java
@@ -19,35 +19,13 @@
 
 package org.apache.james.webadmin.mdc;
 
-import static org.apache.james.webadmin.authentication.AuthenticationFilter.LOGIN;
+import org.junit.Test;
 
-import org.apache.james.util.MDCStructuredLogger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import nl.jqno.equalsverifier.EqualsVerifier;
 
-import com.google.common.collect.ImmutableSet;
-
-import spark.Filter;
-import spark.Request;
-import spark.Response;
-
-public class LoggingRequestFilter implements Filter {
-    private static final Logger LOGGER = LoggerFactory.getLogger(LoggingRequestFilter.class);
-    static final String REQUEST_BODY = "request-body";
-    static final String METHOD = "method";
-    static final String ENDPOINT = "endpoint";
-    static final String QUERY_PARAMETERS = "queryParameters";
-    static final String IP = "ip";
-
-    @Override
-    public void handle(Request request, Response response) {
-        MDCStructuredLogger.forLogger(LOGGER)
-            .addField(IP, request.ip())
-            .addField(ENDPOINT, request.url())
-            .addField(METHOD, request.requestMethod())
-            .addField(LOGIN, request.attribute(LOGIN))
-            .addField(QUERY_PARAMETERS, ImmutableSet.copyOf(request.queryParams()))
-            .addField(REQUEST_BODY, request.body())
-            .log(logger -> logger.info("WebAdmin request received"));
+public class RequestIdTest {
+    @Test
+    public void shouldMatchBeanContract() {
+        EqualsVerifier.forClass(RequestId.class).verify();
     }
-}
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org