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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org