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));
}
/**