diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java index 0dbd4f44a..92b7f9fba 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java @@ -101,6 +101,12 @@ public class Config { */ public static List DISABLED_PLUGINS = new LinkedList(); + /** + * Name of force enable plugin, The value spilt by , + * if you have multiple plugins need to enable. + */ + public static List FORCE_ENABLE_PLUGINS = new LinkedList(); + public static class MongoDB { /** * If true, trace all the parameters, default is false. diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java index 96a82f896..5ccd13b70 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginDefine.java @@ -15,9 +15,15 @@ public class PluginDefine { */ private String defineClass; - private PluginDefine(String name, String defineClass) { + /** + * The sate of plugin. + */ + private State state; + + private PluginDefine(String name, String defineClass, State state) { this.name = name; this.defineClass = defineClass; + this.state = state; } public static PluginDefine build(String define) throws IllegalPluginDefineException { @@ -30,16 +36,31 @@ public class PluginDefine { throw new IllegalPluginDefineException(define); } - return new PluginDefine(pluginDefine[0], pluginDefine[1]); + String pluginName = pluginDefine[0]; + String defineClass = pluginDefine[1]; + if (pluginName.toUpperCase().startsWith("[OFF]")) { + return new PluginDefine(pluginName.substring(5), defineClass, State.OFF); + } else { + return new PluginDefine(pluginName, defineClass, State.ON); + } } public boolean enable() { - return !Config.Plugin.DISABLED_PLUGINS.contains(name); + return !Config.Plugin.DISABLED_PLUGINS.contains(name) || forceEnable(); + } + + + private boolean forceEnable() { + return state == State.OFF && Config.Plugin.FORCE_ENABLE_PLUGINS.contains(name); } public String getDefineClass() { return defineClass; } + + private enum State { + OFF, ON; + } }