Skip to content

Commit 1e0635b

Browse files
authored
Adds tests for log4j2 ThreadContext baggage attributes (open-telemetry#8955)
1 parent 2bdddaf commit 1e0635b

File tree

10 files changed

+138
-17
lines changed

10 files changed

+138
-17
lines changed

conventions/src/main/kotlin/otel.spotless-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ spotless {
1818
groovy {
1919
licenseHeaderFile(
2020
rootProject.file("buildscripts/spotless.license.java"),
21-
"(package|import|class)"
21+
"(package|import|(?:abstract )?class)"
2222
)
2323
endWithNewline()
2424
}

instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/javaagent/build.gradle.kts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,27 @@ testing {
4444
}
4545
}
4646
}
47+
48+
val testAddBaggage by registering(JvmTestSuite::class) {
49+
sources {
50+
groovy {
51+
setSrcDirs(listOf("src/testAddBaggage/groovy"))
52+
}
53+
}
54+
dependencies {
55+
implementation(project(":instrumentation:log4j:log4j-context-data:log4j-context-data-common:testing"))
56+
}
57+
58+
targets {
59+
all {
60+
testTask.configure {
61+
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
62+
jvmArgs("-Dlog4j2.is.webapp=false")
63+
jvmArgs("-Dlog4j2.enable.threadlocals=true")
64+
}
65+
}
66+
}
67+
}
4768
}
4869
}
4970

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import io.opentelemetry.instrumentation.test.AgentTestTrait
7+
8+
class AutoLog4jBaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
9+
}

instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/build.gradle.kts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,22 @@ dependencies {
99

1010
testImplementation(project(":instrumentation:log4j:log4j-context-data:log4j-context-data-common:testing"))
1111
}
12+
13+
tasks {
14+
test {
15+
filter {
16+
excludeTestsMatching("LibraryLog4j2BaggageTest")
17+
}
18+
}
19+
20+
val testAddBaggage by registering(Test::class) {
21+
filter {
22+
includeTestsMatching("LibraryLog4j2BaggageTest")
23+
}
24+
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
25+
}
26+
27+
named("check") {
28+
dependsOn(testAddBaggage)
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import io.opentelemetry.instrumentation.test.LibraryTestTrait
7+
8+
class LibraryLog4j2BaggageTest extends Log4J2BaggageTest implements LibraryTestTrait {
9+
}

instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/build.gradle.kts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,22 @@ dependencies {
2020

2121
latestDepTestLibrary("org.apache.logging.log4j:log4j-core:2.16.+") // see log4j-context-data-2.17 module
2222
}
23+
24+
tasks {
25+
test {
26+
filter {
27+
excludeTestsMatching("Log4j27BaggageTest")
28+
}
29+
}
30+
31+
val testAddBaggage by registering(Test::class) {
32+
filter {
33+
includeTestsMatching("Log4j27BaggageTest")
34+
}
35+
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
36+
}
37+
38+
named("check") {
39+
dependsOn(testAddBaggage)
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import io.opentelemetry.instrumentation.test.AgentTestTrait
7+
8+
class Log4j27BaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
abstract class Log4J2BaggageTest extends Log4j2Test {
7+
@Override
8+
boolean expectBaggage() {
9+
return true
10+
}
11+
}

instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/groovy/Log4j2Test.groovy

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
import io.opentelemetry.api.baggage.Baggage
67
import io.opentelemetry.api.trace.Span
78
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
89
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
@@ -41,9 +42,19 @@ abstract class Log4j2Test extends InstrumentationSpecification {
4142
def logger = LogManager.getLogger("TestLogger")
4243

4344
when:
44-
Span span1 = runWithSpan("test") {
45-
logger.info("log message 1")
46-
Span.current()
45+
Baggage baggage = Baggage.empty().toBuilder().put("baggage_key", "baggage_value").build()
46+
Span spanParent
47+
Span spanChild
48+
try (var unusedScope = baggage.makeCurrent()) {
49+
runWithSpan("test") {
50+
spanParent = Span.current()
51+
logger.info("log span parent")
52+
53+
runWithSpan("test-child") {
54+
logger.info("log span child")
55+
spanChild = Span.current()
56+
}
57+
}
4758
}
4859

4960
logger.info("log message 2")
@@ -56,20 +67,33 @@ abstract class Log4j2Test extends InstrumentationSpecification {
5667
def events = ListAppender.get().getEvents()
5768

5869
then:
59-
events.size() == 3
60-
events[0].message == "log message 1"
61-
events[0].contextData["trace_id"] == span1.spanContext.traceId
62-
events[0].contextData["span_id"] == span1.spanContext.spanId
70+
events.size() == 4
71+
events[0].message == "log span parent"
72+
events[0].contextData["trace_id"] == spanParent.spanContext.traceId
73+
events[0].contextData["span_id"] == spanParent.spanContext.spanId
6374
events[0].contextData["trace_flags"] == "01"
75+
events[0].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
6476

65-
events[1].message == "log message 2"
66-
events[1].contextData["trace_id"] == null
67-
events[1].contextData["span_id"] == null
68-
events[1].contextData["trace_flags"] == null
77+
events[1].message == "log span child"
78+
events[1].contextData["trace_id"] == spanChild.spanContext.traceId
79+
events[1].contextData["span_id"] == spanChild.spanContext.spanId
80+
events[1].contextData["trace_flags"] == "01"
81+
events[1].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
82+
83+
events[2].message == "log message 2"
84+
events[2].contextData["trace_id"] == null
85+
events[2].contextData["span_id"] == null
86+
events[2].contextData["trace_flags"] == null
87+
events[2].contextData["baggage.baggage_key"] == null
88+
89+
events[3].message == "log message 3"
90+
events[3].contextData["trace_id"] == span2.spanContext.traceId
91+
events[3].contextData["span_id"] == span2.spanContext.spanId
92+
events[3].contextData["trace_flags"] == "01"
93+
events[3].contextData["baggage.baggage_key"] == null
94+
}
6995

70-
events[2].message == "log message 3"
71-
events[2].contextData["trace_id"] == span2.spanContext.traceId
72-
events[2].contextData["span_id"] == span2.spanContext.spanId
73-
events[2].contextData["trace_flags"] == "01"
96+
boolean expectBaggage() {
97+
return false
7498
}
7599
}

instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/resources/log4j2-test.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Configuration status="WARN" packages="com.example.appender">
33
<Appenders>
44
<Console name="Console" target="SYSTEM_OUT">
5-
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} traceId: %X{trace_id} spanId: %X{span_id} flags: %X{trace_flags} - %msg%n" />
5+
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} traceId: %X{trace_id} spanId: %X{span_id} flags: %X{trace_flags} baggage.baggage_key: %X{baggage.baggage_key} - %msg%n" />
66
</Console>
77
<ListAppender name="ListAppender" />
88
</Appenders>

0 commit comments

Comments
 (0)