diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 584f06cf4c..d417dd980c 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -28,12 +28,10 @@ import io.opentelemetry.javaagent.bootstrap.DefineClassHelper; import io.opentelemetry.javaagent.bootstrap.InstrumentedTaskClasses; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.tooling.asyncannotationsupport.WeakRefAsyncOperationEndStrategies; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesBuilderImpl; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesConfigurer; import io.opentelemetry.javaagent.tooling.config.AgentConfig; -import io.opentelemetry.javaagent.tooling.config.ConfigInitializer; import io.opentelemetry.javaagent.tooling.ignore.IgnoredClassLoadersMatcher; import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesBuilderImpl; import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesMatcher; @@ -60,7 +58,7 @@ import net.bytebuddy.utility.JavaModule; public class AgentInstaller { - private static final Logger logger; + private static final Logger logger = Logger.getLogger(AgentInstaller.class.getName()); static final String JAVAAGENT_ENABLED_CONFIG = "otel.javaagent.enabled"; static final String JAVAAGENT_NOOP_CONFIG = "otel.javaagent.experimental.use-noop-api"; @@ -77,50 +75,33 @@ public class AgentInstaller { private static final Map> CLASS_LOAD_CALLBACKS = new HashMap<>(); - static { - LoggingConfigurer.configureLogger(); - logger = Logger.getLogger(AgentInstaller.class.getName()); - + public static void installBytebuddyAgent(Instrumentation inst, Config config) { addByteBuddyRawSetting(); - // this needs to be done as early as possible - before the first Config.get() call - ConfigInitializer.initialize(); Integer strictContextStressorMillis = Integer.getInteger(STRICT_CONTEXT_STRESSOR_MILLIS); if (strictContextStressorMillis != null) { io.opentelemetry.context.ContextStorage.addWrapper( storage -> new StrictContextStressor(storage, strictContextStressorMillis)); } - } - public static void installBytebuddyAgent(Instrumentation inst) { logVersionInfo(); - Config config = Config.get(); if (config.getBoolean(JAVAAGENT_ENABLED_CONFIG, true)) { setupUnsafe(inst); List agentListeners = loadOrdered(AgentListener.class); - installBytebuddyAgent(inst, agentListeners); + installBytebuddyAgent(inst, config, agentListeners); } else { logger.fine("Tracing is disabled, not installing instrumentations."); } } - /** - * Install the core bytebuddy agent along with all implementations of {@link - * InstrumentationModule}. - * - * @param inst Java Instrumentation used to install bytebuddy - * @return the agent's class transformer - */ - public static ResettableClassFileTransformer installBytebuddyAgent( - Instrumentation inst, Iterable agentListeners) { + private static void installBytebuddyAgent( + Instrumentation inst, Config config, Iterable agentListeners) { WeakRefAsyncOperationEndStrategies.initialize(); EmbeddedInstrumentationProperties.setPropertiesLoader( AgentInitializer.getExtensionsClassLoader()); - Config config = Config.get(); - setBootstrapPackages(config); setDefineClassHandler(); @@ -192,8 +173,6 @@ public class AgentInstaller { if (autoConfiguredSdk != null) { runAfterAgentListeners(agentListeners, config, autoConfiguredSdk); } - - return resettableClassFileTransformer; } private static void setupUnsafe(Instrumentation inst) { diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java index ae37d05489..d9ce4bceef 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java @@ -5,8 +5,10 @@ package io.opentelemetry.javaagent.tooling; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.javaagent.bootstrap.AgentInitializer; import io.opentelemetry.javaagent.bootstrap.AgentStarter; +import io.opentelemetry.javaagent.tooling.config.ConfigInitializer; import java.io.File; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.Instrumentation; @@ -62,7 +64,10 @@ public class AgentStarterImpl implements AgentStarter { ClassLoader savedContextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(extensionClassLoader); - AgentInstaller.installBytebuddyAgent(instrumentation); + // setting up logging and configuration need to be done as early as possible + LoggingConfigurer.configureLogger(); + ConfigInitializer.initialize(); + AgentInstaller.installBytebuddyAgent(instrumentation, Config.get()); } finally { Thread.currentThread().setContextClassLoader(savedContextClassLoader); } diff --git a/javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/test/HelperInjectionTest.groovy b/javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/test/HelperInjectionTest.groovy index c2a7971d25..84401d4dfd 100644 --- a/javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/test/HelperInjectionTest.groovy +++ b/javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/test/HelperInjectionTest.groovy @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.test +import io.opentelemetry.instrumentation.api.config.Config import io.opentelemetry.javaagent.tooling.AgentInstaller import io.opentelemetry.javaagent.tooling.HelperInjector import io.opentelemetry.javaagent.tooling.Utils @@ -60,7 +61,7 @@ class HelperInjectionTest extends Specification { def "helpers injected on bootstrap classloader"() { setup: ByteBuddyAgent.install() - AgentInstaller.installBytebuddyAgent(ByteBuddyAgent.getInstrumentation()) + AgentInstaller.installBytebuddyAgent(ByteBuddyAgent.getInstrumentation(), Config.get()) String helperClassName = HelperInjectionTest.getPackage().getName() + '.HelperClass' HelperInjector injector = new HelperInjector("test", [helperClassName], [], this.class.classLoader, ByteBuddyAgent.getInstrumentation()) URLClassLoader bootstrapChild = new URLClassLoader(new URL[0], (ClassLoader) null)