diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml
index 6e398be8a3bd2e1d002b0374efb94b217b645769..9ea7e33d6686bc3c2be7da5cb54b68d50d3ce360 100644
--- a/apm-sniffer/apm-agent-core/pom.xml
+++ b/apm-sniffer/apm-agent-core/pom.xml
@@ -36,7 +36,7 @@
UTF-8
9.4.2.v20170220
1.8.0
- 1.7.6
+ 1.7.9
org.apache.skywalking.apm.dependencies
com.lmax.disruptor
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/ILog.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/ILog.java
index 0589c2659c55279a33ed367e5ffdbbe68aefd5f9..5c4d4960851d2e0aa3bd56a3ebd607aff2c8deb2 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/ILog.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/ILog.java
@@ -33,6 +33,8 @@ public interface ILog {
void warn(String format, Object... arguments);
+ void warn(Throwable e, String format, Object... arguments);
+
void error(String format, Throwable e);
void error(Throwable e, String format, Object... arguments);
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/NoopLogger.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/NoopLogger.java
index 6aa243c7b068a224784f1cd52cc9924652f6ae09..2ad720692b3e9da1bd24d3153aaecf4dfd575901 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/NoopLogger.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/api/NoopLogger.java
@@ -26,9 +26,7 @@ package org.apache.skywalking.apm.agent.core.logging.api;
* Created by xin on 2016/11/10.
*/
public enum NoopLogger implements ILog {
- INSTANCE {
-
- };
+ INSTANCE;
@Override
public void info(String message) {
@@ -89,4 +87,10 @@ public enum NoopLogger implements ILog {
public void error(Throwable e, String format, Object... arguments) {
}
+
+
+ @Override
+ public void warn(Throwable e, String format, Object... arguments) {
+
+ }
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java
index d7c423616235e2e1cada6b31697b78a2e6f6773f..c8e5845adb53eeab684207e17e3c26a383ebf44b 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/logging/core/EasyLogger.java
@@ -105,6 +105,12 @@ public class EasyLogger implements ILog {
logger(LogLevel.WARN, replaceParam(format, arguments), null);
}
+ @Override
+ public void warn(Throwable e, String format, Object... arguments) {
+ if (isWarnEnable())
+ logger(LogLevel.WARN, replaceParam(format, arguments), e);
+ }
+
@Override
public void error(String format, Throwable e) {
if (isErrorEnable())
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/PluginFinder.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/PluginFinder.java
index 09606c05e952f896e67aa2efa02e1e86f80c4976..99e49a50ce238f88ea1c2a70ff4fb3fdd968eb81 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/PluginFinder.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/PluginFinder.java
@@ -30,6 +30,7 @@ import org.apache.skywalking.apm.agent.core.plugin.bytebuddy.AbstractJunction;
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
import org.apache.skywalking.apm.agent.core.plugin.match.IndirectMatch;
import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
+import org.apache.skywalking.apm.agent.core.plugin.match.ProtectiveShieldMatcher;
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.not;
@@ -98,6 +99,6 @@ public class PluginFinder {
judge = judge.or(((IndirectMatch)match).buildJunction());
}
}
- return judge;
+ return new ProtectiveShieldMatcher(judge);
}
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/match/ProtectiveShieldMatcher.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/match/ProtectiveShieldMatcher.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1c80a66355a56e0c71d1fa773fba452af801f8e
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/match/ProtectiveShieldMatcher.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.skywalking.apm.agent.core.plugin.match;
+
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.logging.api.ILog;
+import org.apache.skywalking.apm.agent.core.logging.api.LogManager;
+
+/**
+ * In same cases, some frameworks and libraries use some binary codes tech too. From the community feedback, some of
+ * them have compatible issues with byte-buddy core, which trigger "Can't resolve type description" exception.
+ *
+ * So I build this protective shield by a nested matcher. When the origin matcher(s) can't resolve the type, the
+ * SkyWalking agent ignores this types.
+ *
+ * Notice: this ignore mechanism may miss some instrumentations, but at most cases, it's same. If missing happens,
+ * please pay attention to the WARNING logs.
+ *
+ * @author wu-sheng
+ */
+public class ProtectiveShieldMatcher extends ElementMatcher.Junction.AbstractBase {
+ private static final ILog logger = LogManager.getLogger(ProtectiveShieldMatcher.class);
+
+ private final ElementMatcher super T> matcher;
+
+ public ProtectiveShieldMatcher(ElementMatcher super T> matcher) {
+ this.matcher = matcher;
+ }
+
+ public boolean matches(T target) {
+ try {
+ return this.matcher.matches(target);
+ } catch (Throwable t) {
+ logger.warn(t, "Byte-buddy occurs exception when match type.");
+ return false;
+ }
+ }
+}