Skip to content

Commit 32bba94

Browse files
Merge pull request #41 from SAP/fix-correlation_id
Fix correlation-id in cf-java-logging-support-servlet
2 parents c5519ed + bf16332 commit 32bba94

File tree

19 files changed

+420
-91
lines changed

19 files changed

+420
-91
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ All in all, you should do the following:
2929
And
3030
4. Adjust your logging configuration accordingly.
3131

32-
Let's say you want to make use of the *servlet filter* feature, then you need to add the following dependency to your POM with property `cf-logging-version` referring to the latest nexus version (currently `3.0.2`):
32+
Let's say you want to make use of the *servlet filter* feature, then you need to add the following dependency to your POM with property `cf-logging-version` referring to the latest nexus version (currently `3.0.3`):
3333

3434
```xml
3535
<properties>
36-
<cf-logging-version>3.0.2</cf-logging-version>
36+
<cf-logging-version>3.0.3</cf-logging-version>
3737
</properties>
3838
```
3939

cf-java-logging-support-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<parent>
3333
<groupId>com.sap.hcp.cf.logging</groupId>
3434
<artifactId>cf-java-logging-support-parent</artifactId>
35-
<version>3.0.2</version>
35+
<version>3.0.3</version>
3636
<relativePath>../pom.xml</relativePath>
3737
</parent>
3838
<build>

cf-java-logging-support-core/src/test/java/com/sap/hcp/cf/logging/common/converter/DefaultStacktraceConverterTest.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void run() {
8181
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.f1IsASimpleFunctionWithAnExceptionallyLongName(StacktraceGenerator.java:X)\"," + //
8282
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.generateException(StacktraceGenerator.java:X)\"," + //
8383
"\"\\tat com.sap.hcp.cf.logging.common.converter.DefaultStacktraceConverterTest$X.run(DefaultStacktraceConverterTest.java:X)\"," + //
84-
"\"\\tat java.lang.Thread.run(Thread.java:X)\"]";
84+
"\"\\tat " + getThreadClassName() + ".run(Thread.java:X)\"]";
8585
Assert.assertEquals(expectedString, stringBuilder.toString().replaceAll(":\\d+\\)", ":X)").//
8686
replaceAll("\\$\\d", "\\$X"));
8787
}
@@ -99,7 +99,7 @@ public void run() {
9999
});
100100
thread.start();
101101
thread.join();
102-
expectedString = "[\"-------- STACK TRACE TRUNCATED --------\"," + //
102+
expectedString = "[\"-------- STACK TRACE TRUNCATED --------\"," + //
103103
"\"java.lang.IllegalArgumentException: too long\"," + //
104104
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.f3IsASimpleFunctionWithAnExceptionallyLongName(StacktraceGenerator.java:X)\"," + //
105105
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.f3IsASimpleFunctionWithAnExceptionallyLongName(StacktraceGenerator.java:X)\"," + //
@@ -115,9 +115,17 @@ public void run() {
115115
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.f1IsASimpleFunctionWithAnExceptionallyLongName(StacktraceGenerator.java:X)\"," + //
116116
"\"\\tat com.sap.hcp.cf.logging.common.helper.StacktraceGenerator.generateException(StacktraceGenerator.java:X)\"," + //
117117
"\"\\tat com.sap.hcp.cf.logging.common.converter.DefaultStacktraceConverterTest$X.run(DefaultStacktraceConverterTest.java:X)\"," + //
118-
"\"\\tat java.lang.Thread.run(Thread.java:X)\"]";
118+
"\"\\tat " + getThreadClassName() + ".run(Thread.java:X)\"]";
119119
Assert.assertEquals(expectedString, stringBuilder.toString().replaceAll(":\\d+\\)", ":X)").//
120120
replaceAll("\\$\\d", "\\$X"));
121121
}
122122

123+
// This method is required to account for the module path in stacktraces
124+
// after Java 9
125+
private String getThreadClassName() {
126+
String stackTraceElement = Thread.currentThread().getStackTrace()[0].toString();
127+
int i = stackTraceElement.indexOf("Thread");
128+
return stackTraceElement.subSequence(0, i) + Thread.class.getSimpleName();
129+
}
130+
123131
}
Lines changed: 92 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,103 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3-
<modelVersion>4.0.0</modelVersion>
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
44

5-
<artifactId>cf-java-logging-support-jersey</artifactId>
6-
<packaging>jar</packaging>
5+
<artifactId>cf-java-logging-support-jersey</artifactId>
6+
<packaging>jar</packaging>
77

8-
<parent>
9-
<relativePath>../pom.xml</relativePath>
10-
<groupId>com.sap.hcp.cf.logging</groupId>
11-
<artifactId>cf-java-logging-support-parent</artifactId>
12-
<version>3.0.2</version>
13-
</parent>
8+
<parent>
9+
<relativePath>../pom.xml</relativePath>
10+
<groupId>com.sap.hcp.cf.logging</groupId>
11+
<artifactId>cf-java-logging-support-parent</artifactId>
12+
<version>3.0.3</version>
13+
</parent>
1414

15-
<name>cf-java-logging-support-jersey</name>
15+
<name>cf-java-logging-support-jersey</name>
1616

17-
<properties>
18-
<jersey.version>2.22.1</jersey.version>
19-
</properties>
17+
<properties>
18+
<jersey.version>2.22.1</jersey.version>
19+
</properties>
2020

21-
<dependencies>
22-
<!-- Jersey - RESTful Web service -->
23-
<dependency>
24-
<groupId>org.glassfish.jersey.core</groupId>
25-
<artifactId>jersey-client</artifactId>
26-
<version>${jersey.version}</version>
27-
<scope>provided</scope>
28-
</dependency>
21+
<dependencies>
22+
<!-- Jersey - RESTful Web service -->
23+
<dependency>
24+
<groupId>org.glassfish.jersey.core</groupId>
25+
<artifactId>jersey-client</artifactId>
26+
<version>${jersey.version}</version>
27+
<scope>provided</scope>
28+
</dependency>
2929

30-
<dependency>
31-
<groupId>org.glassfish.jersey.core</groupId>
32-
<artifactId>jersey-server</artifactId>
33-
<version>${jersey.version}</version>
34-
<scope>provided</scope>
35-
</dependency>
30+
<dependency>
31+
<groupId>org.glassfish.jersey.core</groupId>
32+
<artifactId>jersey-server</artifactId>
33+
<version>${jersey.version}</version>
34+
<scope>provided</scope>
35+
</dependency>
3636

37-
<dependency>
38-
<groupId>com.sap.hcp.cf.logging</groupId>
39-
<artifactId>cf-java-logging-support-core</artifactId>
40-
<version>${project.version}</version>
41-
<scope>compile</scope>
42-
</dependency>
37+
<dependency>
38+
<groupId>com.sap.hcp.cf.logging</groupId>
39+
<artifactId>cf-java-logging-support-core</artifactId>
40+
<version>${project.version}</version>
41+
<scope>compile</scope>
42+
</dependency>
4343

44-
<!-- unit test related -->
45-
<dependency>
46-
<groupId>org.glassfish.jersey.test-framework</groupId>
47-
<artifactId>jersey-test-framework-core</artifactId>
48-
<version>${jersey.version}</version>
49-
<scope>test</scope>
50-
</dependency>
44+
<!-- unit test related -->
45+
<dependency>
46+
<groupId>org.glassfish.jersey.test-framework</groupId>
47+
<artifactId>jersey-test-framework-core</artifactId>
48+
<version>${jersey.version}</version>
49+
<scope>test</scope>
50+
</dependency>
5151

52-
<dependency>
53-
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
54-
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
55-
<version>${jersey.version}</version>
56-
<scope>test</scope>
57-
</dependency>
58-
<!-- we need our log4j2 implementation for testing! -->
59-
<dependency>
60-
<groupId>com.sap.hcp.cf.logging</groupId>
61-
<artifactId>cf-java-logging-support-log4j2</artifactId>
62-
<version>${project.version}</version>
63-
<scope>test</scope>
64-
</dependency>
65-
<dependency>
66-
<groupId>org.apache.logging.log4j</groupId>
67-
<artifactId>log4j-slf4j-impl</artifactId>
68-
<version>${log4j2.version}</version>
69-
<scope>test</scope>
70-
</dependency>
71-
<dependency>
72-
<groupId>org.apache.logging.log4j</groupId>
73-
<artifactId>log4j-core</artifactId>
74-
<version>${log4j2.version}</version>
75-
<scope>test</scope>
76-
</dependency>
77-
</dependencies>
52+
<dependency>
53+
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
54+
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
55+
<version>${jersey.version}</version>
56+
<scope>test</scope>
57+
</dependency>
58+
59+
<dependency>
60+
<groupId>javax.xml.bind</groupId>
61+
<artifactId>jaxb-api</artifactId>
62+
<version>2.2.8</version>
63+
<scope>test</scope>
64+
</dependency>
65+
<dependency>
66+
<groupId>com.sun.xml.bind</groupId>
67+
<artifactId>jaxb-core</artifactId>
68+
<version>2.2.11</version>
69+
<scope>test</scope>
70+
</dependency>
71+
<dependency>
72+
<groupId>com.sun.xml.bind</groupId>
73+
<artifactId>jaxb-impl</artifactId>
74+
<version>2.2.11</version>
75+
<scope>test</scope>
76+
</dependency>
77+
<dependency>
78+
<groupId>javax.activation</groupId>
79+
<artifactId>activation</artifactId>
80+
<version>1.1.1</version>
81+
<scope>test</scope>
82+
</dependency>
83+
<!-- we need our log4j2 implementation for testing! -->
84+
<dependency>
85+
<groupId>com.sap.hcp.cf.logging</groupId>
86+
<artifactId>cf-java-logging-support-log4j2</artifactId>
87+
<version>${project.version}</version>
88+
<scope>test</scope>
89+
</dependency>
90+
<dependency>
91+
<groupId>org.apache.logging.log4j</groupId>
92+
<artifactId>log4j-slf4j-impl</artifactId>
93+
<version>${log4j2.version}</version>
94+
<scope>test</scope>
95+
</dependency>
96+
<dependency>
97+
<groupId>org.apache.logging.log4j</groupId>
98+
<artifactId>log4j-core</artifactId>
99+
<version>${log4j2.version}</version>
100+
<scope>test</scope>
101+
</dependency>
102+
</dependencies>
78103
</project>

cf-java-logging-support-log4j2/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<relativePath>../pom.xml</relativePath>
1212
<groupId>com.sap.hcp.cf.logging</groupId>
1313
<artifactId>cf-java-logging-support-parent</artifactId>
14-
<version>3.0.2</version>
14+
<version>3.0.3</version>
1515
</parent>
1616

1717
<dependencies>

cf-java-logging-support-logback/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<relativePath>../pom.xml</relativePath>
1111
<groupId>com.sap.hcp.cf.logging</groupId>
1212
<artifactId>cf-java-logging-support-parent</artifactId>
13-
<version>3.0.2</version>
13+
<version>3.0.3</version>
1414
</parent>
1515

1616
<dependencies>

cf-java-logging-support-servlet/pom.xml

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,34 @@
55
<artifactId>cf-java-logging-support-servlet</artifactId>
66
<packaging>jar</packaging>
77

8-
<name>cf-java-logging-support-servlet</name>
9-
<parent>
10-
<groupId>com.sap.hcp.cf.logging</groupId>
11-
<artifactId>cf-java-logging-support-parent</artifactId>
12-
<version>3.0.2</version>
13-
<relativePath>../pom.xml</relativePath>
14-
</parent>
8+
<name>cf-java-logging-support-servlet</name>
9+
<parent>
10+
<groupId>com.sap.hcp.cf.logging</groupId>
11+
<artifactId>cf-java-logging-support-parent</artifactId>
12+
<version>3.0.3</version>
13+
<relativePath>../pom.xml</relativePath>
14+
</parent>
1515

1616
<properties>
1717
<servlet.api.version>3.0.1</servlet.api.version>
1818
</properties>
1919

2020
<dependencies>
21+
<dependency>
22+
<groupId>javax.xml.bind</groupId>
23+
<artifactId>jaxb-api</artifactId>
24+
<version>2.2.8</version>
25+
</dependency>
26+
<dependency>
27+
<groupId>com.sun.xml.bind</groupId>
28+
<artifactId>jaxb-core</artifactId>
29+
<version>2.2.11</version>
30+
</dependency>
31+
<dependency>
32+
<groupId>com.sun.xml.bind</groupId>
33+
<artifactId>jaxb-impl</artifactId>
34+
<version>2.2.11</version>
35+
</dependency>
2136
<!-- servlet api -->
2237
<dependency>
2338
<groupId>javax.servlet</groupId>
@@ -54,5 +69,26 @@
5469
<artifactId>jackson-databind</artifactId>
5570
<version>2.9.9.1</version>
5671
</dependency>
72+
73+
<!-- testing -->
74+
<dependency>
75+
<groupId>org.eclipse.jetty</groupId>
76+
<artifactId>jetty-server</artifactId>
77+
<version>9.4.19.v20190610</version>
78+
<scope>test</scope>
79+
</dependency>
80+
<dependency>
81+
<groupId>org.eclipse.jetty</groupId>
82+
<artifactId>jetty-servlet</artifactId>
83+
<version>9.4.19.v20190610</version>
84+
<scope>test</scope>
85+
</dependency>
86+
<dependency>
87+
<groupId>org.apache.httpcomponents</groupId>
88+
<artifactId>httpclient</artifactId>
89+
<version>4.5.9</version>
90+
<scope>test</scope>
91+
</dependency>
92+
5793
</dependencies>
5894
</project>

cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/HttpHeaderUtilities.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import javax.servlet.http.HttpServletRequest;
44
import javax.servlet.http.HttpServletResponse;
55

6+
import com.sap.hcp.cf.logging.common.LogContext;
67
import com.sap.hcp.cf.logging.common.request.HttpHeader;
78

89
public final class HttpHeaderUtilities {
@@ -25,14 +26,26 @@ public static String getHeaderValue(HttpServletRequest httpRequest, HttpHeader h
2526
return value;
2627
}
2728
}
29+
String contextFieldValue = getLogContextFieldValue(header);
30+
if (contextFieldValue != null) {
31+
return contextFieldValue;
32+
}
2833
return defaultValue;
2934
}
3035

36+
3137
private static String getHeaderValueInternal(HttpServletRequest httpRequest, HttpHeader header) {
3238
String headerName = header.getName();
3339
return httpRequest.getHeader(headerName);
3440
}
3541

42+
private static String getLogContextFieldValue(HttpHeader header) {
43+
if (header.getField() == null) {
44+
return null;
45+
}
46+
return LogContext.get(header.getField());
47+
}
48+
3649
public static String getHeaderValue(HttpServletResponse httpResponse, HttpHeader header) {
3750
return getHeaderValue(httpResponse, header, null);
3851
}

cf-java-logging-support-servlet/src/main/java/com/sap/hcp/cf/logging/servlet/filter/RequestLoggingFilter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ private void doFilterRequest(HttpServletRequest httpRequest, HttpServletResponse
9696

9797
RequestRecord rr = requestRecordFactory.create(httpRequest);
9898
httpRequest.setAttribute(MDC.class.getName(), MDC.getCopyOfContextMap());
99+
100+
if (!httpResponse.isCommitted() && httpResponse.getHeader(HttpHeaders.CORRELATION_ID.getName()) == null) {
101+
httpResponse.setHeader(HttpHeaders.CORRELATION_ID.getName(), LogContext.getCorrelationId());
102+
}
99103

100104
/*
101105
* -- we essentially do three things here: -- a) we create a log
@@ -133,6 +137,7 @@ private void doFilterRequest(HttpServletRequest httpRequest, HttpServletResponse
133137
if (dynamicLogLevelProcessor != null) {
134138
dynamicLogLevelProcessor.removeDynamicLogLevelFromMDC();
135139
}
140+
LogContext.resetContextFields();
136141
}
137142
}
138143

0 commit comments

Comments
 (0)