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 { groovy {
licenseHeaderFile( licenseHeaderFile(
rootProject.file("buildscripts/spotless.license.java"), rootProject.file("buildscripts/spotless.license.java"),
"(package|import|class)" "(package|import|(?:abstract )?class)"
) )
endWithNewline() 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")) 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 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 * SPDX-License-Identifier: Apache-2.0
*/ */
import io.opentelemetry.api.baggage.Baggage
import io.opentelemetry.api.trace.Span import io.opentelemetry.api.trace.Span
import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender import io.opentelemetry.instrumentation.log4j.contextdata.ListAppender
import io.opentelemetry.instrumentation.test.InstrumentationSpecification import io.opentelemetry.instrumentation.test.InstrumentationSpecification
@ -41,9 +42,19 @@ abstract class Log4j2Test extends InstrumentationSpecification {
def logger = LogManager.getLogger("TestLogger") def logger = LogManager.getLogger("TestLogger")
when: when:
Span span1 = runWithSpan("test") { Baggage baggage = Baggage.empty().toBuilder().put("baggage_key", "baggage_value").build()
logger.info("log message 1") Span spanParent
Span.current() 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") logger.info("log message 2")
@ -56,20 +67,33 @@ abstract class Log4j2Test extends InstrumentationSpecification {
def events = ListAppender.get().getEvents() def events = ListAppender.get().getEvents()
then: then:
events.size() == 3 events.size() == 4
events[0].message == "log message 1" events[0].message == "log span parent"
events[0].contextData["trace_id"] == span1.spanContext.traceId events[0].contextData["trace_id"] == spanParent.spanContext.traceId
events[0].contextData["span_id"] == span1.spanContext.spanId events[0].contextData["span_id"] == spanParent.spanContext.spanId
events[0].contextData["trace_flags"] == "01" events[0].contextData["trace_flags"] == "01"
events[0].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[1].message == "log message 2" events[1].message == "log span child"
events[1].contextData["trace_id"] == null events[1].contextData["trace_id"] == spanChild.spanContext.traceId
events[1].contextData["span_id"] == null events[1].contextData["span_id"] == spanChild.spanContext.spanId
events[1].contextData["trace_flags"] == null events[1].contextData["trace_flags"] == "01"
events[1].contextData["baggage.baggage_key"] == (expectBaggage() ? "baggage_value" : null)
events[2].message == "log message 3" events[2].message == "log message 2"
events[2].contextData["trace_id"] == span2.spanContext.traceId events[2].contextData["trace_id"] == null
events[2].contextData["span_id"] == span2.spanContext.spanId events[2].contextData["span_id"] == null
events[2].contextData["trace_flags"] == "01" 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"> <Configuration status="WARN" packages="com.example.appender">
<Appenders> <Appenders>
<Console name="Console" target="SYSTEM_OUT"> <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> </Console>
<ListAppender name="ListAppender" /> <ListAppender name="ListAppender" />
</Appenders> </Appenders>