From 2f78e0b3c91592a4616d383cdde37f0e3dffd0d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=80=9D?= Date: Sun, 9 Mar 2025 17:36:21 +0800 Subject: [PATCH 1/4] do not override user's MDC --- .../OpenTelemetryContextDataProvider.java | 6 +++++ .../log4j/contextdata/Log4j2Test.java | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java index 970d89086627..57024ded7c3c 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.apache.logging.log4j.ThreadContext; import org.apache.logging.log4j.core.util.ContextDataProvider; /** @@ -67,6 +68,11 @@ public Map supplyContextData() { return staticContextData; } + if (ThreadContext.containsKey(ContextDataKeys.TRACE_ID_KEY)) { + // Assume already instrumented event if traceId is present. + return staticContextData; + } + Map contextData = new HashMap<>(staticContextData); SpanContext spanContext = currentSpan.getSpanContext(); contextData.put(ContextDataKeys.TRACE_ID_KEY, spanContext.getTraceId()); diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java index 5f24d0892d53..3df406b61ef7 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java @@ -10,11 +10,13 @@ import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.ThreadContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -132,4 +134,29 @@ void testIdsWhenSpan() { assertThat(events.get(3).getContextData().get(getLoggingKey("trace_flags"))).isEqualTo("01"); assertThat(events.get(3).getContextData().get("baggage.baggage_key")).isNull(); } + + @Test + void testNoOverrideTraceId() { + Logger logger = LogManager.getLogger("TestLogger"); + + AtomicReference spanParent = new AtomicReference<>(); + ThreadContext.put(getLoggingKey("trace_id"), "test_traceId"); + ThreadContext.put(getLoggingKey("span_id"), "test_spanId"); + ThreadContext.put(getLoggingKey("trace_flags"), "test_traceFlag"); + getInstrumentationExtension() + .runWithSpan( + "test", + () -> { + spanParent.set(Span.current()); + logger.info("log span parent"); + }); + List events = ListAppender.get().getEvents(); + assertThat(events.size()).isEqualTo(1); + assertThat(events.get(0).getMessage()).isEqualTo("log span parent"); + assertThat(events.get(0).getContextData().get(getLoggingKey("trace_id"))) + .isEqualTo("test_traceId"); + assertThat(events.get(0).getContextData().get(getLoggingKey("span_id"))) + .isEqualTo("test_spanId"); + assertThat(events.get(0).getContextData().get(getLoggingKey("trace_flags"))).isEqualTo("test_traceFlag"); + } } From f3b9b454f47a81d4f14cbe914f08a202160e169a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=80=9D?= Date: Sun, 9 Mar 2025 19:25:44 +0800 Subject: [PATCH 2/4] do not override user's MDC --- .../instrumentation/log4j/contextdata/Log4j2Test.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java index 3df406b61ef7..34dbe17f4fc7 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java @@ -7,10 +7,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.api.baggage.Baggage; -import io.opentelemetry.api.trace.Span; -import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.util.List; import java.util.concurrent.atomic.AtomicReference; From a9b1d484da27b193fbf3a24583c3ea8606987b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=80=9D?= Date: Sun, 9 Mar 2025 21:52:20 +0800 Subject: [PATCH 3/4] spotless apply --- .../instrumentation/log4j/contextdata/Log4j2Test.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java index 34dbe17f4fc7..9b2d726ed7fc 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java @@ -7,6 +7,9 @@ import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.api.baggage.Baggage; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -153,6 +156,8 @@ void testNoOverrideTraceId() { .isEqualTo("test_traceId"); assertThat(events.get(0).getContextData().get(getLoggingKey("span_id"))) .isEqualTo("test_spanId"); - assertThat(events.get(0).getContextData().get(getLoggingKey("trace_flags"))).isEqualTo("test_traceFlag"); + assertThat(events.get(0).getContextData().get(getLoggingKey("trace_flags"))) + .isEqualTo("test_traceFlag"); + ThreadContext.clearAll(); } } From 1a6a84b51b31e2e85e8e37bc4360f28a3e783402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=80=9D?= Date: Thu, 13 Mar 2025 10:23:02 +0800 Subject: [PATCH 4/4] fix comment --- .../instrumentation/log4j/contextdata/Log4j2Test.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java index 9b2d726ed7fc..e0dfc3c7cc99 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java @@ -138,7 +138,6 @@ void testIdsWhenSpan() { void testNoOverrideTraceId() { Logger logger = LogManager.getLogger("TestLogger"); - AtomicReference spanParent = new AtomicReference<>(); ThreadContext.put(getLoggingKey("trace_id"), "test_traceId"); ThreadContext.put(getLoggingKey("span_id"), "test_spanId"); ThreadContext.put(getLoggingKey("trace_flags"), "test_traceFlag"); @@ -146,10 +145,10 @@ void testNoOverrideTraceId() { .runWithSpan( "test", () -> { - spanParent.set(Span.current()); logger.info("log span parent"); }); List events = ListAppender.get().getEvents(); + ThreadContext.clearAll(); assertThat(events.size()).isEqualTo(1); assertThat(events.get(0).getMessage()).isEqualTo("log span parent"); assertThat(events.get(0).getContextData().get(getLoggingKey("trace_id"))) @@ -158,6 +157,5 @@ void testNoOverrideTraceId() { .isEqualTo("test_spanId"); assertThat(events.get(0).getContextData().get(getLoggingKey("trace_flags"))) .isEqualTo("test_traceFlag"); - ThreadContext.clearAll(); } }