diff --git a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java index b9a728f7d2ed..4a31c6057de9 100644 --- a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java +++ b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java @@ -10,6 +10,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @@ -24,7 +25,7 @@ public ApplicationLoggingInstrumentationModule() { public boolean defaultEnabled(ConfigProperties config) { // only enable this instrumentation if the application logger is enabled return super.defaultEnabled(config) - && "application".equals(config.getString("otel.javaagent.logging")); + && "application".equals(EarlyInitAgentConfig.get().getLogging()); } @Override diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java index 1afa737ca656..47e5b6430d22 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java @@ -18,12 +18,12 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi; import io.opentelemetry.javaagent.instrumentation.instrumentationannotations.AnnotationExcludedMethods; import io.opentelemetry.javaagent.instrumentation.kotlinxcoroutines.instrumentationannotations.SpanAttributeUtil.Parameter; +import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import java.util.Arrays; import java.util.List; import kotlin.coroutines.Continuation; @@ -58,8 +58,7 @@ class WithSpanInstrumentation implements TypeInstrumentation { private static final boolean CHECK_CLASS = DeclarativeConfigUtil.getInstrumentationConfig( GlobalOpenTelemetry.get(), "kotlinx_coroutines") - .getBoolean( - "check_class", ConfigPropertiesUtil.getBoolean("otel.javaagent.debug", false)); + .getBoolean("check_class", EarlyInitAgentConfig.get().isDebug()); private final ElementMatcher.Junction annotatedMethodMatcher; // this matcher matches all methods that should be excluded from transformation diff --git a/javaagent-internal-logging-application/src/main/java/io/opentelemetry/javaagent/logging/application/ApplicationLoggingCustomizer.java b/javaagent-internal-logging-application/src/main/java/io/opentelemetry/javaagent/logging/application/ApplicationLoggingCustomizer.java index 19256cb499bd..be875bbb1bb4 100644 --- a/javaagent-internal-logging-application/src/main/java/io/opentelemetry/javaagent/logging/application/ApplicationLoggingCustomizer.java +++ b/javaagent-internal-logging-application/src/main/java/io/opentelemetry/javaagent/logging/application/ApplicationLoggingCustomizer.java @@ -20,9 +20,8 @@ public String name() { } @Override - public void init(EarlyInitAgentConfig earlyConfig) { - int limit = - earlyConfig.getInt("otel.javaagent.logging.application.logs-buffer-max-records", 2048); + public void init() { + int limit = EarlyInitAgentConfig.get().getLoggingApplicationLogsBufferMaxRecords(); InMemoryLogStore inMemoryLogStore = new InMemoryLogStore(limit); ApplicationLoggerFactory loggerFactory = new ApplicationLoggerFactory(inMemoryLogStore); // register a shutdown hook that'll dump the logs to stderr in case something goes wrong diff --git a/javaagent-internal-logging-simple/src/main/java/io/opentelemetry/javaagent/logging/simple/Slf4jSimpleLoggingCustomizer.java b/javaagent-internal-logging-simple/src/main/java/io/opentelemetry/javaagent/logging/simple/Slf4jSimpleLoggingCustomizer.java index 148f7a5ec3d7..f6c1da316637 100644 --- a/javaagent-internal-logging-simple/src/main/java/io/opentelemetry/javaagent/logging/simple/Slf4jSimpleLoggingCustomizer.java +++ b/javaagent-internal-logging-simple/src/main/java/io/opentelemetry/javaagent/logging/simple/Slf4jSimpleLoggingCustomizer.java @@ -31,12 +31,12 @@ public String name() { } @Override - public void init(EarlyInitAgentConfig earlyConfig) { + public void init() { setSystemPropertyDefault(SIMPLE_LOGGER_SHOW_DATE_TIME_PROPERTY, "true"); setSystemPropertyDefault( SIMPLE_LOGGER_DATE_TIME_FORMAT_PROPERTY, SIMPLE_LOGGER_DATE_TIME_FORMAT_DEFAULT); - if (earlyConfig.getBoolean("otel.javaagent.debug", false)) { + if (EarlyInitAgentConfig.get().isDebug()) { setSystemPropertyDefault(SIMPLE_LOGGER_DEFAULT_LOG_LEVEL_PROPERTY, "DEBUG"); setSystemPropertyDefault(SIMPLE_LOGGER_PREFIX + "okhttp3.internal.http2", "INFO"); setSystemPropertyDefault( 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 330a85305f1c..46e05f0ac5cc 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 @@ -80,8 +80,6 @@ public class AgentInstaller { private static final Logger logger = Logger.getLogger(AgentInstaller.class.getName()); - static final String JAVAAGENT_ENABLED_CONFIG = "otel.javaagent.enabled"; - // This property may be set to force synchronous AgentListener#afterAgent() execution: the // condition for delaying the AgentListener initialization is pretty broad and in case it covers // too much javaagent users can file a bug, force sync execution by setting this property to true @@ -96,8 +94,7 @@ public class AgentInstaller { private static volatile boolean instrumentationInstalled; - public static void installBytebuddyAgent( - Instrumentation inst, ClassLoader extensionClassLoader, EarlyInitAgentConfig earlyConfig) { + public static void installBytebuddyAgent(Instrumentation inst, ClassLoader extensionClassLoader) { addByteBuddyRawSetting(); Integer strictContextStressorMillis = Integer.getInteger(STRICT_CONTEXT_STRESSOR_MILLIS); @@ -107,9 +104,9 @@ public static void installBytebuddyAgent( } logVersionInfo(); - if (earlyConfig.getBoolean(JAVAAGENT_ENABLED_CONFIG, true)) { + if (EarlyInitAgentConfig.get().isEnabled()) { List agentListeners = loadOrdered(AgentListener.class, extensionClassLoader); - installBytebuddyAgent(inst, extensionClassLoader, agentListeners, earlyConfig); + installBytebuddyAgent(inst, extensionClassLoader, agentListeners); } else { logger.fine("Agent is disabled, not installing instrumentations."); } @@ -118,13 +115,12 @@ public static void installBytebuddyAgent( private static void installBytebuddyAgent( Instrumentation inst, ClassLoader extensionClassLoader, - Iterable agentListeners, - EarlyInitAgentConfig earlyConfig) { + Iterable agentListeners) { WeakRefAsyncOperationEndStrategies.initialize(); EmbeddedInstrumentationProperties.setPropertiesLoader(extensionClassLoader); setDefineClassHandler(); - FieldBackedImplementationConfiguration.configure(earlyConfig); + FieldBackedImplementationConfiguration.configure(); // preload ThreadLocalRandom to avoid occasional // java.lang.ClassCircularityError: java/util/concurrent/ThreadLocalRandom // see https://github.com/raphw/byte-buddy/issues/1666 and @@ -163,7 +159,7 @@ private static void installBytebuddyAgent( installEarlyInstrumentation(agentBuilder, inst); AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = - installOpenTelemetrySdk(extensionClassLoader, earlyConfig); + installOpenTelemetrySdk(extensionClassLoader); ConfigProperties sdkConfig = AutoConfigureUtil.getConfig(autoConfiguredSdk); 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 c501509f771c..9128e2ab754f 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 @@ -71,12 +71,11 @@ public boolean delayStart() { public void start() { installTransformers(); - EarlyInitAgentConfig earlyConfig = EarlyInitAgentConfig.create(); - extensionClassLoader = createExtensionClassLoader(getClass().getClassLoader(), earlyConfig); + extensionClassLoader = createExtensionClassLoader(getClass().getClassLoader()); // allows loading instrumenter customizers from agent and extensions ServiceLoaderUtil.setLoadFunction(clazz -> ServiceLoader.load(clazz, extensionClassLoader)); - String loggerImplementationName = earlyConfig.getString("otel.javaagent.logging"); + String loggerImplementationName = EarlyInitAgentConfig.get().getLogging(); // default to the built-in stderr slf4j-simple logger if (loggerImplementationName == null) { loggerImplementationName = "simple"; @@ -98,10 +97,10 @@ public void start() { Throwable startupError = null; try { - loggingCustomizer.init(earlyConfig); - earlyConfig.logEarlyConfigErrorsIfAny(); + loggingCustomizer.init(); + EarlyInitAgentConfig.get().logEarlyConfigErrorsIfAny(); - AgentInstaller.installBytebuddyAgent(instrumentation, extensionClassLoader, earlyConfig); + AgentInstaller.installBytebuddyAgent(instrumentation, extensionClassLoader); WeakConcurrentMapCleaner.start(); // LazyStorage reads system properties. Initialize it here where we have permissions to avoid @@ -141,10 +140,9 @@ public ClassLoader getExtensionClassLoader() { return extensionClassLoader; } - private ClassLoader createExtensionClassLoader( - ClassLoader agentClassLoader, EarlyInitAgentConfig earlyConfig) { + private ClassLoader createExtensionClassLoader(ClassLoader agentClassLoader) { return ExtensionClassLoader.getInstance( - agentClassLoader, javaagentFile, isSecurityManagerSupportEnabled, earlyConfig); + agentClassLoader, javaagentFile, isSecurityManagerSupportEnabled); } private static class LaunchHelperClassFileTransformer implements ClassFileTransformer { diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java index 02f6c7a892a9..4a30548f4d44 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java @@ -11,7 +11,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.instrumentation.thread.internal.AddThreadDetailsSpanProcessor; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; +import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -44,7 +44,7 @@ private static SdkTracerProviderBuilder configure( private static void maybeEnableLoggingExporter( SdkTracerProviderBuilder builder, ConfigProperties config) { - if (AgentConfig.isDebugModeEnabled(config)) { + if (EarlyInitAgentConfig.get().isDebug()) { // don't install another instance if the user has already explicitly requested it. if (loggingExporterIsNotAlreadyConfigured(config)) { builder.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtensionClassLoader.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtensionClassLoader.java index 25b6562148a4..5133949d87a8 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtensionClassLoader.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtensionClassLoader.java @@ -42,7 +42,6 @@ // TODO find a way to initialize logging before using this class @SuppressWarnings("SystemOut") public class ExtensionClassLoader extends URLClassLoader { - public static final String EXTENSIONS_CONFIG = "otel.javaagent.extensions"; private final boolean isSecurityManagerSupportEnabled; @@ -54,15 +53,12 @@ public class ExtensionClassLoader extends URLClassLoader { } public static ClassLoader getInstance( - ClassLoader parent, - File javaagentFile, - boolean isSecurityManagerSupportEnabled, - EarlyInitAgentConfig earlyConfig) { + ClassLoader parent, File javaagentFile, boolean isSecurityManagerSupportEnabled) { List extensions = new ArrayList<>(); includeEmbeddedExtensionsIfFound(extensions, javaagentFile); - extensions.addAll(parseLocation(earlyConfig.getString(EXTENSIONS_CONFIG), javaagentFile)); + extensions.addAll(parseLocation(EarlyInitAgentConfig.get().getExtensions(), javaagentFile)); // TODO when logging is configured add warning about deprecated property diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingCustomizer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingCustomizer.java index c26c0a878001..68fc8ee616f1 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingCustomizer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/LoggingCustomizer.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.tooling; -import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; // only one LoggingCustomizer is allowed, and its presence will suppress the @@ -22,7 +21,7 @@ public interface LoggingCustomizer { // note that if this throws an exception, it will end up calling onStartupFailure, because // otherwise that exception will bubble up to OpenTelemetryAgent where a distro cannot control the // logging of it. - void init(EarlyInitAgentConfig earlyConfig); + void init(); /** * Register a callback which will be called on synchronous startup success. @@ -35,7 +34,7 @@ public interface LoggingCustomizer { /** * Register a callback which will be called on synchronous startup failure (including if {@link - * #init(EarlyInitAgentConfig)} fails). + * #init()} fails). * *

Synchronous startup may or may not include running {@link * io.opentelemetry.javaagent.extension.AgentListener#afterAgent( diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/NoopLoggingCustomizer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/NoopLoggingCustomizer.java index b2dc61b9470b..47de6e2a8c7f 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/NoopLoggingCustomizer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/NoopLoggingCustomizer.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.tooling; import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; @AutoService(LoggingCustomizer.class) public final class NoopLoggingCustomizer implements LoggingCustomizer { @@ -17,7 +16,7 @@ public String name() { } @Override - public void init(EarlyInitAgentConfig earlyConfig) {} + public void init() {} @Override @SuppressWarnings("SystemOut") diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 9e9789145f14..83554f955d54 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -33,7 +33,7 @@ public final class OpenTelemetryInstaller { * @return the {@link AutoConfiguredOpenTelemetrySdk} */ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( - ClassLoader extensionClassLoader, EarlyInitAgentConfig earlyConfig) { + ClassLoader extensionClassLoader) { AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = AutoConfiguredOpenTelemetrySdk.builder() @@ -52,7 +52,7 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( // Provide a fake ConfigProperties until we have migrated all runtime configuration // access to use declarative configuration API configProvider = ((ExtendedOpenTelemetry) sdk).getConfigProvider(); - configProperties = getDeclarativeConfigBridgedProperties(earlyConfig, configProvider); + configProperties = getDeclarativeConfigBridgedProperties(configProvider); } setForceFlush(sdk); @@ -66,16 +66,15 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( } // Visible for testing - static ConfigProperties getDeclarativeConfigBridgedProperties( - EarlyInitAgentConfig earlyConfig, ConfigProvider configProvider) { + static ConfigProperties getDeclarativeConfigBridgedProperties(ConfigProvider configProvider) { return new DeclarativeConfigPropertiesBridgeBuilder() .addMapping("otel.javaagent", "agent") .addOverride("otel.instrumentation.common.default-enabled", defaultEnabled(configProvider)) // these properties are used to initialize the SDK before the configuration file // is loaded for consistency, we pass them to the bridge, so that they can be read // later with the same value from the {@link DeclarativeConfigPropertiesBridge} - .addOverride("otel.javaagent.debug", earlyConfig.getBoolean("otel.javaagent.debug", false)) - .addOverride("otel.javaagent.logging", earlyConfig.getString("otel.javaagent.logging")) + .addOverride("otel.javaagent.debug", EarlyInitAgentConfig.get().isDebug()) + .addOverride("otel.javaagent.logging", EarlyInitAgentConfig.get().getLogging()) .buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProvider.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProvider.java index 00634e858503..1d62a4ae4a20 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProvider.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProvider.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.tooling; import com.google.auto.service.AutoService; -import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.instrumentation.logging.internal.AbstractSpanLoggingCustomizerProvider; +import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; @@ -17,8 +17,6 @@ public class SpanLoggingCustomizerProvider extends AbstractSpanLoggingCustomizer @Override protected boolean isEnabled(OpenTelemetryConfigurationModel model) { - // read from system properties as it's an early init property and the config bridge is not - // available here - return ConfigPropertiesUtil.getBoolean("otel.javaagent.debug", false); + return EarlyInitAgentConfig.get().isDebug(); } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java index 4e0d51497cb5..10d2af1220c3 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java @@ -7,15 +7,10 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; public final class AgentConfig { - public static boolean isDebugModeEnabled(ConfigProperties config) { - return config.getBoolean("otel.javaagent.debug", false); - } - public static String instrumentationMode() { String mode = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java index d39f1b9cfd6a..c1493ba9eab2 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java @@ -15,8 +15,11 @@ */ public final class EarlyInitAgentConfig { - public static EarlyInitAgentConfig create() { - return new EarlyInitAgentConfig(ConfigurationFile.getProperties()); + private static final EarlyInitAgentConfig INSTANCE = + new EarlyInitAgentConfig(ConfigurationFile.getProperties()); + + public static EarlyInitAgentConfig get() { + return INSTANCE; } private final Map configFileContents; @@ -26,7 +29,33 @@ private EarlyInitAgentConfig(Map configFileContents) { } @Nullable - public String getString(String propertyName) { + public String getLogging() { + return getString("otel.javaagent.logging"); + } + + @Nullable + public String getExtensions() { + return getString("otel.javaagent.extensions"); + } + + public boolean isDebug() { + return getBoolean("otel.javaagent.debug", false); + } + + public boolean isEnabled() { + return getBoolean("otel.javaagent.enabled", true); + } + + public boolean isExperimentalFieldInjectionEnabled() { + return getBoolean("otel.javaagent.experimental.field-injection.enabled", true); + } + + public int getLoggingApplicationLogsBufferMaxRecords() { + return getInt("otel.javaagent.logging.application.logs-buffer-max-records", 2048); + } + + @Nullable + private String getString(String propertyName) { String value = ConfigPropertiesUtil.getString(propertyName); if (value != null) { return value; @@ -34,14 +63,14 @@ public String getString(String propertyName) { return configFileContents.get(propertyName); } - public boolean getBoolean(String propertyName, boolean defaultValue) { + private boolean getBoolean(String propertyName, boolean defaultValue) { String configFileValueStr = configFileContents.get(propertyName); boolean configFileValue = configFileValueStr == null ? defaultValue : Boolean.parseBoolean(configFileValueStr); return ConfigPropertiesUtil.getBoolean(propertyName, configFileValue); } - public int getInt(String propertyName, int defaultValue) { + private int getInt(String propertyName, int defaultValue) { try { String configFileValueStr = configFileContents.get(propertyName); int configFileValue = diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/FieldBackedImplementationConfiguration.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/FieldBackedImplementationConfiguration.java index 370ca2e85662..94a738ced62c 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/FieldBackedImplementationConfiguration.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/FieldBackedImplementationConfiguration.java @@ -10,9 +10,8 @@ public final class FieldBackedImplementationConfiguration { static boolean fieldInjectionEnabled = true; - public static void configure(EarlyInitAgentConfig config) { - fieldInjectionEnabled = - config.getBoolean("otel.javaagent.experimental.field-injection.enabled", true); + public static void configure() { + fieldInjectionEnabled = EarlyInitAgentConfig.get().isExperimentalFieldInjectionEnabled(); } private FieldBackedImplementationConfiguration() {} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java index 14b3b72ced10..f9f0f611b129 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java @@ -77,16 +77,14 @@ AgentBuilder install( } if (instrumentationModule.isIndyModule()) { - return installIndyModule(instrumentationModule, parentAgentBuilder, config); + return installIndyModule(instrumentationModule, parentAgentBuilder); } else { - return installInjectingModule(instrumentationModule, parentAgentBuilder, config); + return installInjectingModule(instrumentationModule, parentAgentBuilder); } } private AgentBuilder installIndyModule( - InstrumentationModule instrumentationModule, - AgentBuilder parentAgentBuilder, - ConfigProperties config) { + InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder) { List helperClassNames = InstrumentationModuleMuzzle.getHelperClassNames(instrumentationModule); HelperResourceBuilderImpl helperResourceBuilder = new HelperResourceBuilderImpl(); @@ -118,7 +116,7 @@ private AgentBuilder installIndyModule( .injectClasses(injectedClassesCollector); } - MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule, config); + MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule); Function> helperGenerator = cl -> { @@ -170,9 +168,7 @@ private AgentBuilder installIndyModule( } private AgentBuilder installInjectingModule( - InstrumentationModule instrumentationModule, - AgentBuilder parentAgentBuilder, - ConfigProperties config) { + InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder) { List helperClassNames = InstrumentationModuleMuzzle.getHelperClassNames(instrumentationModule); HelperResourceBuilderImpl helperResourceBuilder = new HelperResourceBuilderImpl(); @@ -189,7 +185,7 @@ private AgentBuilder installInjectingModule( return parentAgentBuilder; } - MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule, config); + MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule); AgentBuilder.Transformer helperInjector = new HelperInjector( instrumentationModule.instrumentationName(), diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java index fd9f84924e5f..2f49e81ff02a 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java @@ -13,12 +13,11 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TransformSafeLogger; import io.opentelemetry.javaagent.tooling.Utils; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; +import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.javaagent.tooling.instrumentation.indy.IndyModuleRegistry; import io.opentelemetry.javaagent.tooling.instrumentation.indy.InstrumentationModuleClassLoader; import io.opentelemetry.javaagent.tooling.muzzle.Mismatch; import io.opentelemetry.javaagent.tooling.muzzle.ReferenceMatcher; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.security.ProtectionDomain; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -45,12 +44,10 @@ class MuzzleMatcher implements AgentBuilder.RawMatcher { private volatile ReferenceMatcher referenceMatcher; MuzzleMatcher( - TransformSafeLogger instrumentationLogger, - InstrumentationModule instrumentationModule, - ConfigProperties config) { + TransformSafeLogger instrumentationLogger, InstrumentationModule instrumentationModule) { this.instrumentationLogger = instrumentationLogger; this.instrumentationModule = instrumentationModule; - this.muzzleLogLevel = AgentConfig.isDebugModeEnabled(config) ? WARNING : FINE; + this.muzzleLogLevel = EarlyInitAgentConfig.get().isDebug() ? WARNING : FINE; } @Override diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/test/HelperInjectionTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/test/HelperInjectionTest.java index 20c84ef8a031..bfd037eba346 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/test/HelperInjectionTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/test/HelperInjectionTest.java @@ -15,7 +15,6 @@ import io.opentelemetry.javaagent.tooling.AgentInstaller; import io.opentelemetry.javaagent.tooling.HelperInjector; import io.opentelemetry.javaagent.tooling.Utils; -import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import java.lang.ref.WeakReference; import java.net.URL; import java.net.URLClassLoader; @@ -104,9 +103,7 @@ void helpersInjectedToNonDelegatingClassloader() throws Exception { void helpersInjectedOnBootstrapClassloader() throws Exception { ByteBuddyAgent.install(); AgentInstaller.installBytebuddyAgent( - ByteBuddyAgent.getInstrumentation(), - this.getClass().getClassLoader(), - EarlyInitAgentConfig.create()); + ByteBuddyAgent.getInstrumentation(), this.getClass().getClassLoader()); String helperClassName = HelperInjectionTest.class.getPackage().getName() + ".HelperClass"; HelperInjector injector = diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java index c522bb4ecb23..bbb2a3fc084f 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java @@ -36,8 +36,7 @@ void setUp() { @Test void globalOpenTelemetry() { AutoConfiguredOpenTelemetrySdk sdk = - OpenTelemetryInstaller.installOpenTelemetrySdk( - EarlyInitAgentConfig.class.getClassLoader(), EarlyInitAgentConfig.create()); + OpenTelemetryInstaller.installOpenTelemetrySdk(EarlyInitAgentConfig.class.getClassLoader()); assertThat(sdk).isNotNull().isNotEqualTo(OpenTelemetry.noop()); } @@ -63,7 +62,6 @@ void defaultEnabledInDeclarativeConfigPropertiesBridge( Supplier configPropertiesSupplier = () -> OpenTelemetryInstaller.getDeclarativeConfigBridgedProperties( - EarlyInitAgentConfig.create(), SdkConfigProvider.create( DeclarativeConfiguration.parse( new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8))))); diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java index 93c4b7574999..d319e2006614 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java @@ -46,8 +46,7 @@ void fileConfigOverwritesUserPropertiesSupplier(@TempDir Path tempDir) throws IO // when AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = - OpenTelemetryInstaller.installOpenTelemetrySdk( - this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); + OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader()); // then assertThat(AutoConfigureUtil.getConfig(autoConfiguredSdk).getString("custom.key")) diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java index cbca89d51548..267018dfe2f2 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java @@ -31,8 +31,7 @@ void setUp() { void keepUserOtlpProtocolConfiguration() { // when AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = - OpenTelemetryInstaller.installOpenTelemetrySdk( - this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); + OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader()); // then assertThat( @@ -44,8 +43,7 @@ void keepUserOtlpProtocolConfiguration() { void defaultHttpProtobufOtlpProtocolConfiguration() { // when AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = - OpenTelemetryInstaller.installOpenTelemetrySdk( - this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); + OpenTelemetryInstaller.installOpenTelemetrySdk(this.getClass().getClassLoader()); // then assertThat(