diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/ListAppender.groovy b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/ListAppender.groovy deleted file mode 100644 index 6960ee0c7467..000000000000 --- a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/ListAppender.groovy +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import org.apache.log4j.AppenderSkeleton -import org.apache.log4j.spi.LoggingEvent - -class ListAppender extends AppenderSkeleton { - static events = new ArrayList() - - @Override - protected void append(LoggingEvent loggingEvent) { - events.add(loggingEvent) - } - - @Override - boolean requiresLayout() { - return false - } - - @Override - void close() { - } - - static clearEvents() { - events.clear() - } -} diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/Log4j1MdcTest.groovy b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/Log4j1MdcTest.groovy deleted file mode 100644 index 02b5b4272d31..000000000000 --- a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/groovy/Log4j1MdcTest.groovy +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.api.trace.Span -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import org.apache.log4j.LogManager - -class Log4j1MdcTest extends AgentInstrumentationSpecification { - def cleanup() { - ListAppender.clearEvents() - } - - def "no ids when no span"() { - given: - def logger = LogManager.getLogger('TestLogger') - - when: - logger.info("log message 1") - logger.info("log message 2") - - then: - def events = ListAppender.events - - events.size() == 2 - events[0].message == "log message 1" - events[0].getMDC("trace_id") == null - events[0].getMDC("span_id") == null - events[0].getMDC("trace_flags") == null - - events[1].message == "log message 2" - events[1].getMDC("trace_id") == null - events[1].getMDC("span_id") == null - events[1].getMDC("trace_flags") == null - } - - def "ids when span"() { - given: - def logger = LogManager.getLogger('TestLogger') - - when: - def span1 = runWithSpan("test") { - logger.info("log message 1") - Span.current() - } - - logger.info("log message 2") - - def span2 = runWithSpan("test 2") { - logger.info("log message 3") - Span.current() - } - - then: - def events = ListAppender.events - - events.size() == 3 - events[0].message == "log message 1" - events[0].getMDC("trace_id") == span1.spanContext.traceId - events[0].getMDC("span_id") == span1.spanContext.spanId - events[0].getMDC("trace_flags") == "01" - - events[1].message == "log message 2" - events[1].getMDC("trace_id") == null - events[1].getMDC("span_id") == null - events[1].getMDC("trace_flags") == null - - events[2].message == "log message 3" - // this explicit getMDCCopy() call here is to make sure that whole instrumentation is tested - events[2].getMDCCopy() - events[2].getMDC("trace_id") == span2.spanContext.traceId - events[2].getMDC("span_id") == span2.spanContext.spanId - events[2].getMDC("trace_flags") == "01" - } -} diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/ListAppender.java b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/ListAppender.java new file mode 100644 index 000000000000..3c0dd72c7a21 --- /dev/null +++ b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/ListAppender.java @@ -0,0 +1,37 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.log4j.mdc.v1_2; + +import java.util.ArrayList; +import java.util.List; +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.spi.LoggingEvent; + +public class ListAppender extends AppenderSkeleton { + + private static final List events = new ArrayList(); + + @Override + protected void append(LoggingEvent loggingEvent) { + events.add(loggingEvent); + } + + @Override + public boolean requiresLayout() { + return false; + } + + @Override + public void close() {} + + public static void clearEvents() { + events.clear(); + } + + public static List getEvents() { + return events; + } +} diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/Log4j1MdcTest.java b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/Log4j1MdcTest.java new file mode 100644 index 000000000000..5a3bcc190628 --- /dev/null +++ b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/Log4j1MdcTest.java @@ -0,0 +1,93 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.log4j.mdc.v1_2; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import java.util.List; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.apache.log4j.spi.LoggingEvent; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +public class Log4j1MdcTest { + + @RegisterExtension + private static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + private static final Logger logger = LogManager.getLogger("TestLogger"); + + @BeforeEach + void cleanup() { + ListAppender.clearEvents(); + } + + @Test + void noIdsWhenNoSpan() { + logger.info("log message 1"); + logger.info("log message 2"); + + List events = ListAppender.getEvents(); + + assertEquals(2, events.size()); + assertEquals("log message 1", events.get(0).getMessage()); + assertNull(events.get(0).getMDC("trace_id")); + assertNull(events.get(0).getMDC("span_id")); + assertNull(events.get(0).getMDC("trace_flags")); + + assertEquals("log message 2", events.get(1).getMessage()); + assertNull(events.get(1).getMDC("trace_id")); + assertNull(events.get(1).getMDC("span_id")); + assertNull(events.get(1).getMDC("trace_flags")); + } + + @Test + void idsWhenSpan() { + Span span1 = + testing.runWithSpan( + "test", + () -> { + logger.info("log message 1"); + return Span.current(); + }); + + logger.info("log message 2"); + + Span span2 = + testing.runWithSpan( + "test 2", + () -> { + logger.info("log message 3"); + return Span.current(); + }); + + List events = ListAppender.getEvents(); + + assertEquals(3, events.size()); + assertEquals("log message 1", events.get(0).getMessage()); + assertEquals(events.get(0).getMDC("trace_id"), span1.getSpanContext().getTraceId()); + assertEquals(events.get(0).getMDC("span_id"), span1.getSpanContext().getSpanId()); + assertEquals(events.get(0).getMDC("trace_flags"), "01"); + + assertEquals("log message 2", events.get(1).getMessage()); + assertNull(events.get(1).getMDC("trace_id")); + assertNull(events.get(1).getMDC("span_id")); + assertNull(events.get(1).getMDC("trace_flags")); + + assertEquals("log message 3", events.get(2).getMessage()); + // this explicit getMDCCopy() call here is to make sure that whole instrumentation is tested + events.get(2).getMDCCopy(); + assertEquals(events.get(2).getMDC("trace_id"), span2.getSpanContext().getTraceId()); + assertEquals(events.get(2).getMDC("span_id"), span2.getSpanContext().getSpanId()); + assertEquals(events.get(2).getMDC("trace_flags"), "01"); + } +} diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/resources/log4j.properties b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/resources/log4j.properties index e7104aab698c..17376cab2644 100644 --- a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/resources/log4j.properties +++ b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/test/resources/log4j.properties @@ -1,2 +1,2 @@ log4j.rootLogger=INFO, LIST -log4j.appender.LIST=ListAppender +log4j.appender.LIST=io.opentelemetry.javaagent.instrumentation.log4j.mdc.v1_2.ListAppender