Skip to content

Commit 8e388fc

Browse files
Revert log injection changes
1 parent cfb974d commit 8e388fc

File tree

13 files changed

+27
-277
lines changed

13 files changed

+27
-277
lines changed

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/AdditionalLibraryIgnoresMatcher.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,6 @@ public boolean matches(final T target) {
203203
if (name.equals("ch.qos.logback.core.AsyncAppenderBase$Worker")) {
204204
return false;
205205
}
206-
// for inserting service, env, version in MDC of every thread
207-
if (name.equals("ch.qos.logback.classic.util.LogbackMDCAdapter")) {
208-
return false;
209-
}
210206

211207
return true;
212208
}

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/log/LogContextScopeListener.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,9 @@
22

33
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
44

5-
import datadog.trace.api.Config;
65
import datadog.trace.api.CorrelationIdentifier;
7-
import datadog.trace.bootstrap.instrumentation.api.Tags;
86
import datadog.trace.context.ScopeListener;
9-
import java.lang.reflect.InvocationTargetException;
107
import java.lang.reflect.Method;
11-
import java.util.Collections;
12-
import java.util.HashMap;
13-
import java.util.Map;
148
import lombok.extern.slf4j.Slf4j;
159

1610
/**
@@ -56,34 +50,4 @@ public void afterScopeClosed() {
5650
log.debug("Exception removing log context context", e);
5751
}
5852
}
59-
60-
static final Map<String, String> LOG_CONTEXT_DD_TAGS;
61-
62-
static {
63-
Map<String, String> logContextDDTags = new HashMap<>();
64-
logContextDDTags.put(Tags.DD_SERVICE, Config.get().getServiceName());
65-
final Map<String, String> mergedSpanTags = Config.get().getMergedSpanTags();
66-
String version = "";
67-
String env = "";
68-
if (mergedSpanTags != null) {
69-
version = mergedSpanTags.get("version");
70-
if (version == null) {
71-
version = "";
72-
}
73-
env = mergedSpanTags.get("env");
74-
if (env == null) {
75-
env = "";
76-
}
77-
}
78-
logContextDDTags.put(Tags.DD_VERSION, version);
79-
logContextDDTags.put(Tags.DD_ENV, env);
80-
LOG_CONTEXT_DD_TAGS = Collections.unmodifiableMap(logContextDDTags);
81-
}
82-
83-
public static void addDDTagsToMDC(final Method putMethod)
84-
throws InvocationTargetException, IllegalAccessException {
85-
for (final Map.Entry<String, String> e : LOG_CONTEXT_DD_TAGS.entrySet()) {
86-
putMethod.invoke(null, e.getKey(), e.getValue());
87-
}
88-
}
8953
}

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/log/ThreadLocalWithDDTagsInitValue.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ClassLoaderMatcherTest.groovy

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package datadog.trace.agent.test
22

33
import datadog.trace.agent.tooling.ClassLoaderMatcher
4-
import datadog.trace.agent.tooling.log.LogContextScopeListener
5-
import datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue
64
import datadog.trace.bootstrap.DatadogClassLoader
75
import datadog.trace.util.test.DDSpecification
86

@@ -40,12 +38,6 @@ class ClassLoaderMatcherTest extends DDSpecification {
4038
DatadogClassLoader.name == "datadog.trace.bootstrap.DatadogClassLoader"
4139
}
4240

43-
def "helper class names are hardcoded in Log Instrumentations"() {
44-
expect:
45-
LogContextScopeListener.name == "datadog.trace.agent.tooling.log.LogContextScopeListener"
46-
ThreadLocalWithDDTagsInitValue.name == "datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue"
47-
}
48-
4941
/*
5042
* A URLClassloader which only delegates java.* classes
5143
*/

dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/Log4j1MDCInstrumentation.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package datadog.trace.instrumentation.log4j1;
22

33
import static java.util.Collections.singletonMap;
4-
import static net.bytebuddy.matcher.ElementMatchers.isTypeInitializer;
4+
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
55
import static net.bytebuddy.matcher.ElementMatchers.named;
66

77
import com.google.auto.service.AutoService;
88
import datadog.trace.agent.tooling.Instrumenter;
99
import datadog.trace.agent.tooling.log.LogContextScopeListener;
1010
import datadog.trace.api.Config;
1111
import datadog.trace.api.GlobalTracer;
12-
import java.lang.reflect.InvocationTargetException;
1312
import java.lang.reflect.Method;
1413
import java.util.Map;
1514
import net.bytebuddy.asm.Advice;
@@ -38,7 +37,7 @@ public ElementMatcher<? super TypeDescription> typeMatcher() {
3837
@Override
3938
public Map<? extends ElementMatcher<? super MethodDescription>, String> transformers() {
4039
return singletonMap(
41-
isTypeInitializer(), Log4j1MDCInstrumentation.class.getName() + "$MDCContextAdvice");
40+
isConstructor(), Log4j1MDCInstrumentation.class.getName() + "$MDCContextAdvice");
4241
}
4342

4443
@Override
@@ -48,16 +47,18 @@ public String[] helperClassNames() {
4847

4948
public static class MDCContextAdvice {
5049
@Advice.OnMethodExit(suppress = Throwable.class)
51-
public static void mdcClassInitialized(@Advice.Origin final Class<?> mdcClass) {
50+
public static void mdcClassInitialized(@Advice.This Object instance) {
51+
if (instance == null) {
52+
return;
53+
}
54+
5255
try {
56+
Class<?> mdcClass = instance.getClass();
5357
final Method putMethod = mdcClass.getMethod("put", String.class, Object.class);
5458
final Method removeMethod = mdcClass.getMethod("remove", String.class);
5559
GlobalTracer.get().addScopeListener(new LogContextScopeListener(putMethod, removeMethod));
56-
// log4j1 uses subclass of InheritableThreadLocal and we don't need to modify private thread
57-
// local field:
58-
LogContextScopeListener.addDDTagsToMDC(putMethod);
59-
} catch (final NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
60-
org.slf4j.LoggerFactory.getLogger(mdcClass)
60+
} catch (final NoSuchMethodException e) {
61+
org.slf4j.LoggerFactory.getLogger(instance.getClass())
6162
.debug("Failed to add log4j ThreadContext span listener", e);
6263
}
6364
}

dd-java-agent/instrumentation/log4j1/src/test/groovy/Log4j1MDCTest.groovy

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,4 @@ class Log4j1MDCTest extends LogContextInjectionTestBase {
1919
def get(String key) {
2020
return MDC.get(key)
2121
}
22-
23-
@Override
24-
def remove(String key) {
25-
MDC.context
26-
return MDC.remove(key)
27-
}
28-
29-
@Override
30-
def clear() {
31-
return MDC.clear()
32-
}
3322
}

dd-java-agent/instrumentation/log4j2/src/main/java/datadog/trace/instrumentation/log4j2/ThreadContextInstrumentation.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77
import com.google.auto.service.AutoService;
88
import datadog.trace.agent.tooling.Instrumenter;
99
import datadog.trace.agent.tooling.log.LogContextScopeListener;
10-
import datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue;
1110
import datadog.trace.api.Config;
1211
import datadog.trace.api.GlobalTracer;
13-
import java.lang.reflect.Field;
1412
import java.lang.reflect.Method;
1513
import java.util.Map;
1614
import net.bytebuddy.asm.Advice;
@@ -20,7 +18,6 @@
2018

2119
@AutoService(Instrumenter.class)
2220
public class ThreadContextInstrumentation extends Instrumenter.Default {
23-
private static final String TYPE_NAME = "org.apache.logging.log4j.ThreadContext";
2421
public static final String MDC_INSTRUMENTATION_NAME = "log4j";
2522

2623
public ThreadContextInstrumentation() {
@@ -34,7 +31,7 @@ protected boolean defaultEnabled() {
3431

3532
@Override
3633
public ElementMatcher<? super TypeDescription> typeMatcher() {
37-
return named(TYPE_NAME);
34+
return named("org.apache.logging.log4j.ThreadContext");
3835
}
3936

4037
@Override
@@ -45,40 +42,18 @@ public Map<? extends ElementMatcher<? super MethodDescription>, String> transfor
4542

4643
@Override
4744
public String[] helperClassNames() {
48-
return new String[] {
49-
"datadog.trace.agent.tooling.log.LogContextScopeListener",
50-
"datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue",
51-
};
45+
return new String[] {"datadog.trace.agent.tooling.log.LogContextScopeListener"};
5246
}
5347

5448
public static class ThreadContextAdvice {
5549
@Advice.OnMethodExit(suppress = Throwable.class)
56-
public static void mdcClassInitialized(@Advice.Origin final Class<?> threadContextClass) {
50+
public static void mdcClassInitialized(@Advice.Origin final Class threadClass) {
5751
try {
58-
final Method putMethod = threadContextClass.getMethod("put", String.class, String.class);
59-
final Method removeMethod = threadContextClass.getMethod("remove", String.class);
52+
final Method putMethod = threadClass.getMethod("put", String.class, String.class);
53+
final Method removeMethod = threadClass.getMethod("remove", String.class);
6054
GlobalTracer.get().addScopeListener(new LogContextScopeListener(putMethod, removeMethod));
61-
62-
final Field contextMapField = threadContextClass.getDeclaredField("contextMap");
63-
contextMapField.setAccessible(true);
64-
Object contextMap = contextMapField.get(null);
65-
if (contextMap
66-
.getClass()
67-
.getCanonicalName()
68-
.equals("org.apache.logging.slf4j.MDCContextMap")) {
69-
org.slf4j.LoggerFactory.getLogger(threadContextClass)
70-
.debug(
71-
"Log4j to SLF4J Adapter detected. "
72-
+ TYPE_NAME
73-
+ "'s ThreadLocal"
74-
+ " field will not be instrumented because it delegates to slf4-MDC");
75-
return;
76-
}
77-
final Field localMapField = contextMap.getClass().getDeclaredField("localMap");
78-
localMapField.setAccessible(true);
79-
localMapField.set(contextMap, new ThreadLocalWithDDTagsInitValue());
80-
} catch (final NoSuchMethodException | NoSuchFieldException | IllegalAccessException e) {
81-
org.slf4j.LoggerFactory.getLogger(threadContextClass)
55+
} catch (final NoSuchMethodException e) {
56+
org.slf4j.LoggerFactory.getLogger(threadClass)
8257
.debug("Failed to add log4j ThreadContext span listener", e);
8358
}
8459
}

dd-java-agent/instrumentation/log4j2/src/test/groovy/Log4jThreadContextTest.groovy

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,4 @@ class Log4jThreadContextTest extends LogContextInjectionTestBase {
1212
def get(String key) {
1313
return ThreadContext.get(key)
1414
}
15-
16-
@Override
17-
def remove(String key) {
18-
return ThreadContext.remove(key)
19-
}
20-
21-
@Override
22-
def clear() {
23-
return ThreadContext.clearAll()
24-
}
2515
}

dd-java-agent/instrumentation/slf4j-mdc/src/main/java/datadog/trace/instrumentation/slf4j/mdc/MDCInjectionInstrumentation.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77
import com.google.auto.service.AutoService;
88
import datadog.trace.agent.tooling.Instrumenter;
99
import datadog.trace.agent.tooling.log.LogContextScopeListener;
10-
import datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue;
1110
import datadog.trace.api.Config;
1211
import datadog.trace.api.GlobalTracer;
13-
import java.lang.reflect.Field;
1412
import java.lang.reflect.Method;
1513
import java.security.ProtectionDomain;
1614
import java.util.Map;
@@ -72,29 +70,17 @@ public boolean matches(final MethodDescription target) {
7270

7371
@Override
7472
public String[] helperClassNames() {
75-
return new String[] {
76-
"datadog.trace.agent.tooling.log.LogContextScopeListener",
77-
"datadog.trace.agent.tooling.log.ThreadLocalWithDDTagsInitValue",
78-
};
73+
return new String[] {"datadog.trace.agent.tooling.log.LogContextScopeListener"};
7974
}
8075

8176
public static class MDCAdvice {
8277
@Advice.OnMethodExit(suppress = Throwable.class)
83-
public static void mdcClassInitialized(@Advice.Origin final Class<?> mdcClass) {
78+
public static void mdcClassInitialized(@Advice.Origin final Class mdcClass) {
8479
try {
8580
final Method putMethod = mdcClass.getMethod("put", String.class, String.class);
8681
final Method removeMethod = mdcClass.getMethod("remove", String.class);
8782
GlobalTracer.get().addScopeListener(new LogContextScopeListener(putMethod, removeMethod));
88-
89-
final Field mdcAdapterField = mdcClass.getDeclaredField("mdcAdapter");
90-
mdcAdapterField.setAccessible(true);
91-
final Object mdcAdapterInstance = mdcAdapterField.get(null);
92-
final Field copyOnThreadLocalField =
93-
mdcAdapterInstance.getClass().getDeclaredField("copyOnThreadLocal");
94-
copyOnThreadLocalField.setAccessible(true);
95-
copyOnThreadLocalField.set(mdcAdapterInstance, new ThreadLocalWithDDTagsInitValue());
96-
97-
} catch (final NoSuchMethodException | IllegalAccessException | NoSuchFieldException e) {
83+
} catch (final NoSuchMethodException e) {
9884
org.slf4j.LoggerFactory.getLogger(mdcClass).debug("Failed to add MDC span listener", e);
9985
}
10086
}

dd-java-agent/instrumentation/slf4j-mdc/src/test/groovy/Slf4jMDCTest.groovy

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,4 @@ class Slf4jMDCTest extends LogContextInjectionTestBase {
1212
def get(String key) {
1313
return MDC.get(key)
1414
}
15-
16-
@Override
17-
def remove(String key) {
18-
return MDC.remove(key)
19-
}
20-
21-
@Override
22-
def clear() {
23-
return MDC.clear()
24-
}
2515
}

0 commit comments

Comments
 (0)