Skip to content

Commit 2f78e0b

Browse files
committed
do not override user's MDC
1 parent c7676bd commit 2f78e0b

File tree

2 files changed

+33
-0
lines changed
  • instrumentation/log4j/log4j-context-data
    • log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17
    • log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata

2 files changed

+33
-0
lines changed

instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Collections;
1717
import java.util.HashMap;
1818
import java.util.Map;
19+
import org.apache.logging.log4j.ThreadContext;
1920
import org.apache.logging.log4j.core.util.ContextDataProvider;
2021

2122
/**
@@ -67,6 +68,11 @@ public Map<String, String> supplyContextData() {
6768
return staticContextData;
6869
}
6970

71+
if (ThreadContext.containsKey(ContextDataKeys.TRACE_ID_KEY)) {
72+
// Assume already instrumented event if traceId is present.
73+
return staticContextData;
74+
}
75+
7076
Map<String, String> contextData = new HashMap<>(staticContextData);
7177
SpanContext spanContext = currentSpan.getSpanContext();
7278
contextData.put(ContextDataKeys.TRACE_ID_KEY, spanContext.getTraceId());

instrumentation/log4j/log4j-context-data/log4j-context-data-common/testing/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/Log4j2Test.java

+27
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
import io.opentelemetry.api.baggage.Baggage;
1111
import io.opentelemetry.api.trace.Span;
1212
import io.opentelemetry.context.Scope;
13+
import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants;
1314
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1415
import java.util.List;
1516
import java.util.concurrent.atomic.AtomicReference;
1617
import org.apache.logging.log4j.LogManager;
1718
import org.apache.logging.log4j.Logger;
19+
import org.apache.logging.log4j.ThreadContext;
1820
import org.junit.jupiter.api.BeforeEach;
1921
import org.junit.jupiter.api.Test;
2022

@@ -132,4 +134,29 @@ void testIdsWhenSpan() {
132134
assertThat(events.get(3).getContextData().get(getLoggingKey("trace_flags"))).isEqualTo("01");
133135
assertThat(events.get(3).getContextData().get("baggage.baggage_key")).isNull();
134136
}
137+
138+
@Test
139+
void testNoOverrideTraceId() {
140+
Logger logger = LogManager.getLogger("TestLogger");
141+
142+
AtomicReference<Span> spanParent = new AtomicReference<>();
143+
ThreadContext.put(getLoggingKey("trace_id"), "test_traceId");
144+
ThreadContext.put(getLoggingKey("span_id"), "test_spanId");
145+
ThreadContext.put(getLoggingKey("trace_flags"), "test_traceFlag");
146+
getInstrumentationExtension()
147+
.runWithSpan(
148+
"test",
149+
() -> {
150+
spanParent.set(Span.current());
151+
logger.info("log span parent");
152+
});
153+
List<ListAppender.LoggedEvent> events = ListAppender.get().getEvents();
154+
assertThat(events.size()).isEqualTo(1);
155+
assertThat(events.get(0).getMessage()).isEqualTo("log span parent");
156+
assertThat(events.get(0).getContextData().get(getLoggingKey("trace_id")))
157+
.isEqualTo("test_traceId");
158+
assertThat(events.get(0).getContextData().get(getLoggingKey("span_id")))
159+
.isEqualTo("test_spanId");
160+
assertThat(events.get(0).getContextData().get(getLoggingKey("trace_flags"))).isEqualTo("test_traceFlag");
161+
}
135162
}

0 commit comments

Comments
 (0)