Adds tests for log4j2 ThreadContext baggage attributes (#8955)

This commit is contained in:
Steven Swartz 2023-07-19 15:23:53 -04:00 committed by GitHub
parent 2bdddafdc4
commit 1e0635ba5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 138 additions and 17 deletions

View File

@ -18,7 +18,7 @@ spotless {
groovy {
licenseHeaderFile(
rootProject.file("buildscripts/spotless.license.java"),
"(package|import|class)"
"(package|import|(?:abstract )?class)"
)
endWithNewline()
}

View File

@ -44,6 +44,27 @@ testing {
}
}
}
val testAddBaggage by registering(JvmTestSuite::class) {
sources {
groovy {
setSrcDirs(listOf("src/testAddBaggage/groovy"))
}
}
dependencies {
implementation(project(":instrumentation:log4j:log4j-context-data:log4j-context-data-common:testing"))
}
targets {
all {
testTask.configure {
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
jvmArgs("-Dlog4j2.is.webapp=false")
jvmArgs("-Dlog4j2.enable.threadlocals=true")
}
}
}
}
}
}

View File

@ -0,0 +1,9 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.AgentTestTrait
class AutoLog4jBaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
}

View File

@ -9,3 +9,22 @@ dependencies {
testImplementation(project(":instrumentation:log4j:log4j-context-data:log4j-context-data-common:testing"))
}
tasks {
test {
filter {
excludeTestsMatching("LibraryLog4j2BaggageTest")
}
}
val testAddBaggage by registering(Test::class) {
filter {
includeTestsMatching("LibraryLog4j2BaggageTest")
}
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
}
named("check") {
dependsOn(testAddBaggage)
}
}

View File

@ -0,0 +1,9 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.LibraryTestTrait
class LibraryLog4j2BaggageTest extends Log4J2BaggageTest implements LibraryTestTrait {
}

View File

@ -20,3 +20,22 @@ dependencies {
latestDepTestLibrary("org.apache.logging.log4j:log4j-core:2.16.+") // see log4j-context-data-2.17 module
}
tasks {
test {
filter {
excludeTestsMatching("Log4j27BaggageTest")
}
}
val testAddBaggage by registering(Test::class) {
filter {
includeTestsMatching("Log4j27BaggageTest")
}
jvmArgs("-Dotel.instrumentation.log4j-context-data.add-baggage=true")
}
named("check") {
dependsOn(testAddBaggage)
}
}

View File

@ -0,0 +1,9 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.instrumentation.test.AgentTestTrait
class Log4j27BaggageTest extends Log4J2BaggageTest implements AgentTestTrait {
}

View File

@ -0,0 +1,11 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
abstract class Log4J2BaggageTest extends Log4j2Test {
@Override
boolean expectBaggage() {
return true
}
}

View File

@ -3,6 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.api.baggage.Baggage
import io.opentelemetry.api.trace.Span
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
@ -41,9 +42,19 @@ abstract class Log4j2Test extends InstrumentationSpecification {
def logger = LogManager.getLogger("TestLogger")
when:
Span span1 = runWithSpan("test") {
logger.info("log message 1")
Span.current()
Baggage baggage = Baggage.empty().toBuilder().put("baggage_key", "baggage_value").build()
Span spanParent
Span spanChild
try (var unusedScope = baggage.makeCurrent()) {
runWithSpan("test") {
spanParent = Span.current()
logger.info("log span parent")
runWithSpan("test-child") {
logger.info("log span child")
spanChild = Span.current()
}
}
}
logger.info("log message 2")
@ -56,20 +67,33 @@ abstract class Log4j2Test extends InstrumentationSpecification {
def events = ListAppender.get().getEvents()
then:
events.size() == 3
events[0].message == "log message 1"
events[0].contextData["trace_id"] == span1.spanContext.traceId
events[0].contextData["span_id"] == span1.spanContext.spanId
events.size() == 4
events[0].message == "log span parent"
events[0].contextData["trace_id"] == spanParent.spanContext.traceId
events[0].contextData["span_id"] == spanParent.spanContext.spanId
events[0].contextData["trace_flags"] == "01"
events[0].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[1].message == "log message 2"
events[1].contextData["trace_id"] == null
events[1].contextData["span_id"] == null
events[1].contextData["trace_flags"] == null
events[1].message == "log span child"
events[1].contextData["trace_id"] == spanChild.spanContext.traceId
events[1].contextData["span_id"] == spanChild.spanContext.spanId
events[1].contextData["trace_flags"] == "01"
events[1].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[2].message == "log message 3"
events[2].contextData["trace_id"] == span2.spanContext.traceId
events[2].contextData["span_id"] == span2.spanContext.spanId
events[2].contextData["trace_flags"] == "01"
events[2].message == "log message 2"
events[2].contextData["trace_id"] == null
events[2].contextData["span_id"] == null
events[2].contextData["trace_flags"] == null
events[2].contextData["baggage.baggage_key"] == null
events[3].message == "log message 3"
events[3].contextData["trace_id"] == span2.spanContext.traceId
events[3].contextData["span_id"] == span2.spanContext.spanId
events[3].contextData["trace_flags"] == "01"
events[3].contextData["baggage.baggage_key"] == null
}
boolean expectBaggage() {
return false
}
}

View File

@ -2,7 +2,7 @@
<Configuration status="WARN" packages="com.example.appender">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<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" />
<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" />
</Console>
<ListAppender name="ListAppender" />
</Appenders>