Loading apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ public class Config { * memory cost estimated. */ public static int SPAN_LIMIT_PER_SEGMENT = 300; /** * If true, skywalking agent will save all instrumented classes files in `/debugging` folder. * Skywalking team may ask for these files in order to resolve compatible problem. */ public static boolean IS_OPEN_DEBUGGING_CLASS = false; } public static class Collector { Loading apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/InstrumentDebuggingClass.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * Copyright 2017, OpenSkywalking Organization All rights reserved. * * Licensed 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. * * Project repository: https://github.com/OpenSkywalking/skywalking */ package org.skywalking.apm.agent; import java.io.File; import java.io.IOException; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException; import org.skywalking.apm.agent.core.boot.AgentPackagePath; import org.skywalking.apm.agent.core.conf.Config; import org.skywalking.apm.agent.core.logging.api.ILog; import org.skywalking.apm.agent.core.logging.api.LogManager; /** * @author wu-sheng */ public enum InstrumentDebuggingClass { INSTANCE; private static final ILog logger = LogManager.getLogger(InstrumentDebuggingClass.class); private File debuggingClassesRootPath; public void log(TypeDescription typeDescription, DynamicType dynamicType) { if (!Config.Agent.IS_OPEN_DEBUGGING_CLASS) { return; } /** * try to do I/O things in synchronized way, to avoid unexpected situations. */ synchronized (INSTANCE) { try { if (debuggingClassesRootPath == null) { try { debuggingClassesRootPath = new File(AgentPackagePath.getPath(), "/debugging"); if (!debuggingClassesRootPath.exists()) { debuggingClassesRootPath.mkdir(); } } catch (AgentPackageNotFoundException e) { logger.error(e, "Can't find the root path for creating /debugging folder."); } } try { dynamicType.saveIn(debuggingClassesRootPath); } catch (IOException e) { logger.error(e, "Can't save class {} to file." + typeDescription.getActualName()); } } catch (Throwable t) { logger.error(t, "Save debugging classes fail."); } } } } apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java +10 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package org.skywalking.apm.agent; import java.lang.instrument.Instrumentation; import java.util.List; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; Loading @@ -26,10 +28,11 @@ import org.skywalking.apm.agent.core.boot.ServiceManager; import org.skywalking.apm.agent.core.conf.SnifferConfigInitializer; import org.skywalking.apm.agent.core.logging.api.ILog; import org.skywalking.apm.agent.core.logging.api.LogManager; import org.skywalking.apm.agent.core.plugin.*; import java.lang.instrument.Instrumentation; import java.util.List; import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.EnhanceContext; import org.skywalking.apm.agent.core.plugin.PluginBootstrap; import org.skywalking.apm.agent.core.plugin.PluginException; import org.skywalking.apm.agent.core.plugin.PluginFinder; /** * The main entrance of sky-waking agent, Loading Loading @@ -103,6 +106,8 @@ public class SkyWalkingAgent { if (logger.isDebugEnable()) { logger.debug("On Transformation class {}.", typeDescription.getName()); } InstrumentDebuggingClass.INSTANCE.log(typeDescription, dynamicType); } @Override Loading @@ -113,7 +118,7 @@ public class SkyWalkingAgent { @Override public void onError(String typeName, ClassLoader classLoader, JavaModule module, boolean loaded, Throwable throwable) { logger.error("Failed to enhance class " + typeName, throwable); logger.error("Enhance class " + typeName + " error.", throwable); } @Override Loading apm-sniffer/config/agent.config +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ agent.application_code=Your_ApplicationName # Ignore the segments if their operation names start with these suffix. # agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg # If true, skywalking agent will save all instrumented classes files in `/debugging` folder. # Skywalking team may ask for these files in order to resolve compatible problem. # agent.is_open_debugging_class = true # Server addresses. # Mapping to `agent_server/jetty/port` in `config/application.yml` of Collector. # Examples: Loading docs/README.md +0 −1 Original line number Diff line number Diff line ## Documents []() [](README_ZH.md) * Getting Started Loading Loading
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ public class Config { * memory cost estimated. */ public static int SPAN_LIMIT_PER_SEGMENT = 300; /** * If true, skywalking agent will save all instrumented classes files in `/debugging` folder. * Skywalking team may ask for these files in order to resolve compatible problem. */ public static boolean IS_OPEN_DEBUGGING_CLASS = false; } public static class Collector { Loading
apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/InstrumentDebuggingClass.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * Copyright 2017, OpenSkywalking Organization All rights reserved. * * Licensed 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. * * Project repository: https://github.com/OpenSkywalking/skywalking */ package org.skywalking.apm.agent; import java.io.File; import java.io.IOException; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import org.skywalking.apm.agent.core.boot.AgentPackageNotFoundException; import org.skywalking.apm.agent.core.boot.AgentPackagePath; import org.skywalking.apm.agent.core.conf.Config; import org.skywalking.apm.agent.core.logging.api.ILog; import org.skywalking.apm.agent.core.logging.api.LogManager; /** * @author wu-sheng */ public enum InstrumentDebuggingClass { INSTANCE; private static final ILog logger = LogManager.getLogger(InstrumentDebuggingClass.class); private File debuggingClassesRootPath; public void log(TypeDescription typeDescription, DynamicType dynamicType) { if (!Config.Agent.IS_OPEN_DEBUGGING_CLASS) { return; } /** * try to do I/O things in synchronized way, to avoid unexpected situations. */ synchronized (INSTANCE) { try { if (debuggingClassesRootPath == null) { try { debuggingClassesRootPath = new File(AgentPackagePath.getPath(), "/debugging"); if (!debuggingClassesRootPath.exists()) { debuggingClassesRootPath.mkdir(); } } catch (AgentPackageNotFoundException e) { logger.error(e, "Can't find the root path for creating /debugging folder."); } } try { dynamicType.saveIn(debuggingClassesRootPath); } catch (IOException e) { logger.error(e, "Can't save class {} to file." + typeDescription.getActualName()); } } catch (Throwable t) { logger.error(t, "Save debugging classes fail."); } } } }
apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java +10 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package org.skywalking.apm.agent; import java.lang.instrument.Instrumentation; import java.util.List; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; Loading @@ -26,10 +28,11 @@ import org.skywalking.apm.agent.core.boot.ServiceManager; import org.skywalking.apm.agent.core.conf.SnifferConfigInitializer; import org.skywalking.apm.agent.core.logging.api.ILog; import org.skywalking.apm.agent.core.logging.api.LogManager; import org.skywalking.apm.agent.core.plugin.*; import java.lang.instrument.Instrumentation; import java.util.List; import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.EnhanceContext; import org.skywalking.apm.agent.core.plugin.PluginBootstrap; import org.skywalking.apm.agent.core.plugin.PluginException; import org.skywalking.apm.agent.core.plugin.PluginFinder; /** * The main entrance of sky-waking agent, Loading Loading @@ -103,6 +106,8 @@ public class SkyWalkingAgent { if (logger.isDebugEnable()) { logger.debug("On Transformation class {}.", typeDescription.getName()); } InstrumentDebuggingClass.INSTANCE.log(typeDescription, dynamicType); } @Override Loading @@ -113,7 +118,7 @@ public class SkyWalkingAgent { @Override public void onError(String typeName, ClassLoader classLoader, JavaModule module, boolean loaded, Throwable throwable) { logger.error("Failed to enhance class " + typeName, throwable); logger.error("Enhance class " + typeName + " error.", throwable); } @Override Loading
apm-sniffer/config/agent.config +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ agent.application_code=Your_ApplicationName # Ignore the segments if their operation names start with these suffix. # agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg # If true, skywalking agent will save all instrumented classes files in `/debugging` folder. # Skywalking team may ask for these files in order to resolve compatible problem. # agent.is_open_debugging_class = true # Server addresses. # Mapping to `agent_server/jetty/port` in `config/application.yml` of Collector. # Examples: Loading
docs/README.md +0 −1 Original line number Diff line number Diff line ## Documents []() [](README_ZH.md) * Getting Started Loading