diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java index 8e97eabf8e..3ebcdc6e8e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java @@ -2,6 +2,7 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Getter; +import org.slf4j.MDC; import sonia.scm.ContextEntry; import sonia.scm.NotFoundException; @@ -29,6 +30,6 @@ public class ErrorDto { } static ErrorDto from(NotFoundException notFoundException) { - return new ErrorDto("todo", "todo", notFoundException.getContext(), notFoundException.getMessage()); + return new ErrorDto(MDC.get("transaction_id"), "todo", notFoundException.getContext(), notFoundException.getMessage()); } } diff --git a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java index ffc976198c..b77a927a2d 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java @@ -41,6 +41,8 @@ import org.apache.shiro.subject.Subject; import org.slf4j.MDC; import sonia.scm.SCMContext; +import sonia.scm.security.DefaultKeyGenerator; +import sonia.scm.security.KeyGenerator; import sonia.scm.web.filter.HttpFilter; //~--- JDK imports ------------------------------------------------------------ @@ -61,27 +63,26 @@ import sonia.scm.Priority; @WebElement(Filters.PATTERN_ALL) public class MDCFilter extends HttpFilter { + private static final DefaultKeyGenerator TRANSACTION_KEY_GENERATOR = new DefaultKeyGenerator(); - /** Field description */ @VisibleForTesting static final String MDC_CLIENT_HOST = "client_host"; - /** Field description */ @VisibleForTesting static final String MDC_CLIENT_IP = "client_ip"; - - /** url of the current request */ + @VisibleForTesting static final String MDC_REQUEST_URI = "request_uri"; - - /** request method */ + @VisibleForTesting static final String MDC_REQUEST_METHOD = "request_method"; - /** Field description */ @VisibleForTesting static final String MDC_USERNAME = "username"; + @VisibleForTesting + static final String MDC_TRANSACTION_ID = "transaction_id"; + //~--- methods -------------------------------------------------------------- /** @@ -105,6 +106,7 @@ public class MDCFilter extends HttpFilter MDC.put(MDC_CLIENT_HOST, request.getRemoteHost()); MDC.put(MDC_REQUEST_METHOD, request.getMethod()); MDC.put(MDC_REQUEST_URI, request.getRequestURI()); + MDC.put(MDC_TRANSACTION_ID, TRANSACTION_KEY_GENERATOR.createKey()); try { @@ -117,6 +119,7 @@ public class MDCFilter extends HttpFilter MDC.remove(MDC_CLIENT_HOST); MDC.remove(MDC_REQUEST_METHOD); MDC.remove(MDC_REQUEST_URI); + MDC.remove(MDC_TRANSACTION_ID); } } diff --git a/scm-webapp/src/main/resources/logback.default.xml b/scm-webapp/src/main/resources/logback.default.xml index 33e914d04d..d03c5a5012 100644 --- a/scm-webapp/src/main/resources/logback.default.xml +++ b/scm-webapp/src/main/resources/logback.default.xml @@ -46,7 +46,7 @@ - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n diff --git a/scm-webapp/src/main/resources/logback.release.xml b/scm-webapp/src/main/resources/logback.release.xml index 4cf5906581..03ac987992 100644 --- a/scm-webapp/src/main/resources/logback.release.xml +++ b/scm-webapp/src/main/resources/logback.release.xml @@ -61,14 +61,14 @@ true - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n diff --git a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java index 56e1a74572..efd3dbbbc0 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java @@ -101,6 +101,7 @@ public class MDCFilterTest extends AbstractTestBase { assertEquals("127.0.0.1", chain.ctx.get(MDCFilter.MDC_CLIENT_IP)); assertEquals("localhost", chain.ctx.get(MDCFilter.MDC_CLIENT_HOST)); assertEquals("GET", chain.ctx.get(MDCFilter.MDC_REQUEST_METHOD)); + assertNotNull(chain.ctx.get(MDCFilter.MDC_TRANSACTION_ID)); } /**