Skip to content

Commit 14b834a

Browse files
committed
Ignore generic classes and proxy classes
1 parent 0d64192 commit 14b834a

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

dd-java-agent/src/main/java/com/datadoghq/agent/TracingAgent.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
*/
1717
package com.datadoghq.agent;
1818

19+
import static com.datadoghq.agent.utils.ClassLoaderNameMatcher.classLoaderWithName;
20+
import static com.datadoghq.agent.utils.ClassLoaderNameMatcher.isReflectionClassLoader;
21+
import static net.bytebuddy.matcher.ElementMatchers.any;
22+
import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader;
23+
import static net.bytebuddy.matcher.ElementMatchers.nameContains;
1924
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
2025

2126
import com.datadoghq.agent.instrumentation.Instrumenter;
@@ -60,13 +65,29 @@ protected static String addManager(String agentArgs) {
6065
}
6166

6267
public static void addByteBuddy(final Instrumentation inst) {
63-
6468
AgentBuilder agentBuilder =
6569
new AgentBuilder.Default()
6670
.disableClassFormatChanges()
6771
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
6872
.with(new Listener())
69-
.ignore(nameStartsWith("com.datadoghq.agent.integration"));
73+
.ignore(nameStartsWith("com.datadoghq.agent.integration"))
74+
.or(nameStartsWith("java."))
75+
.or(nameStartsWith("com.sun."))
76+
.or(nameStartsWith("sun."))
77+
.or(nameStartsWith("jdk."))
78+
.or(nameStartsWith("org.aspectj."))
79+
.or(nameStartsWith("org.groovy."))
80+
.or(nameStartsWith("com.p6spy."))
81+
.or(nameStartsWith("org.slf4j."))
82+
.or(nameContains("javassist"))
83+
.or(nameContains(".asm."))
84+
.ignore(
85+
any(),
86+
isBootstrapClassLoader()
87+
.or(isReflectionClassLoader())
88+
.or(
89+
classLoaderWithName(
90+
"org.codehaus.groovy.runtime.callsite.CallSiteClassLoader")));
7091

7192
for (final Instrumenter instrumenter : ServiceLoader.load(Instrumenter.class)) {
7293
agentBuilder = instrumenter.instrument(agentBuilder);
@@ -95,7 +116,7 @@ public void onTransformation(
95116
final JavaModule module,
96117
final boolean loaded,
97118
final DynamicType dynamicType) {
98-
log.debug("Transformed {0}", typeDescription);
119+
log.debug("Transformed {}", typeDescription);
99120
}
100121

101122
@Override
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.datadoghq.agent.utils;
2+
3+
import net.bytebuddy.matcher.ElementMatcher;
4+
5+
// Borrowed from https://github.com/stagemonitor/stagemonitor/blob/master/stagemonitor-core/src/main/java/org/stagemonitor/core/instrument/ClassLoaderNameMatcher.java
6+
public class ClassLoaderNameMatcher extends ElementMatcher.Junction.AbstractBase<ClassLoader> {
7+
8+
private final String name;
9+
10+
private ClassLoaderNameMatcher(final String name) {
11+
this.name = name;
12+
}
13+
14+
public static ElementMatcher.Junction.AbstractBase<ClassLoader> classLoaderWithName(
15+
final String name) {
16+
return new ClassLoaderNameMatcher(name);
17+
}
18+
19+
public static ElementMatcher.Junction.AbstractBase<ClassLoader> isReflectionClassLoader() {
20+
return new ClassLoaderNameMatcher("sun.reflect.DelegatingClassLoader");
21+
}
22+
23+
@Override
24+
public boolean matches(final ClassLoader target) {
25+
return target != null && name.equals(target.getClass().getName());
26+
}
27+
}

0 commit comments

Comments
 (0)