Avoid overriding user's MDC in Log4j (#13479)
This commit is contained in:
parent
35a3dc6e7c
commit
43cc57cae9
|
@ -16,6 +16,7 @@ import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttribute
|
|||
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 class OpenTelemetryContextDataProvider implements ContextDataProvider {
|
|||
return staticContextData;
|
||||
}
|
||||
|
||||
if (ThreadContext.containsKey(ContextDataKeys.TRACE_ID_KEY)) {
|
||||
// Assume already instrumented event if traceId is present.
|
||||
return staticContextData;
|
||||
}
|
||||
|
||||
Map<String, String> contextData = new HashMap<>(staticContextData);
|
||||
SpanContext spanContext = currentSpan.getSpanContext();
|
||||
contextData.put(ContextDataKeys.TRACE_ID_KEY, spanContext.getTraceId());
|
||||
|
|
|
@ -15,6 +15,7 @@ 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 +133,29 @@ public abstract class Log4j2Test {
|
|||
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");
|
||||
|
||||
ThreadContext.put(getLoggingKey("trace_id"), "test_traceId");
|
||||
ThreadContext.put(getLoggingKey("span_id"), "test_spanId");
|
||||
ThreadContext.put(getLoggingKey("trace_flags"), "test_traceFlag");
|
||||
getInstrumentationExtension()
|
||||
.runWithSpan(
|
||||
"test",
|
||||
() -> {
|
||||
logger.info("log span parent");
|
||||
});
|
||||
List<ListAppender.LoggedEvent> 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")))
|
||||
.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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue