Skip to content

Commit 43cc57c

Browse files
authored
Avoid overriding user's MDC in Log4j (#13479)
1 parent 35a3dc6 commit 43cc57c

File tree

2 files changed

+32
-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

+32
-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

+26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.concurrent.atomic.AtomicReference;
1616
import org.apache.logging.log4j.LogManager;
1717
import org.apache.logging.log4j.Logger;
18+
import org.apache.logging.log4j.ThreadContext;
1819
import org.junit.jupiter.api.BeforeEach;
1920
import org.junit.jupiter.api.Test;
2021

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

0 commit comments

Comments
 (0)