diff --git a/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java b/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java index f70038f26ba..1c3109ce74e 100644 --- a/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java +++ b/dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java @@ -1,5 +1,6 @@ package datadog.trace.bootstrap; +import static datadog.trace.bootstrap.SystemUtils.getPropertyOrEnvVar; import static java.nio.charset.StandardCharsets.UTF_8; import datadog.cli.CLIHelper; @@ -44,8 +45,8 @@ * */ public final class AgentBootstrap { - static final String LIB_INJECTION_ENABLED_FLAG = "DD_INJECTION_ENABLED"; - static final String LIB_INJECTION_FORCE_FLAG = "DD_INJECT_FORCE"; + static final String LIB_INJECTION_ENABLED_ENV_VAR = "DD_INJECTION_ENABLED"; + static final String LIB_INJECTION_FORCE_SYS_PROP = "dd.inject.force"; private static final Class thisClass = AgentBootstrap.class; private static final int MAX_EXCEPTION_CHAIN_LENGTH = 99; @@ -155,11 +156,13 @@ private static void agentmainImpl( static boolean getConfig(String configName) { switch (configName) { - case LIB_INJECTION_ENABLED_FLAG: - return System.getenv(LIB_INJECTION_ENABLED_FLAG) != null; - case LIB_INJECTION_FORCE_FLAG: - String libInjectionForceFlag = System.getenv(LIB_INJECTION_FORCE_FLAG); - return "true".equalsIgnoreCase(libInjectionForceFlag) || "1".equals(libInjectionForceFlag); + case LIB_INJECTION_ENABLED_ENV_VAR: + return System.getenv(LIB_INJECTION_ENABLED_ENV_VAR) != null; + case LIB_INJECTION_FORCE_SYS_PROP: + { + String injectionForceFlag = getPropertyOrEnvVar(LIB_INJECTION_FORCE_SYS_PROP); + return "true".equalsIgnoreCase(injectionForceFlag) || "1".equals(injectionForceFlag); + } default: return false; } @@ -285,8 +288,9 @@ static int parseJavaMajorVersion(String version) { static boolean shouldAbortDueToOtherJavaAgents() { // Simply considering having multiple agents - if (getConfig(LIB_INJECTION_ENABLED_FLAG) - && !getConfig(LIB_INJECTION_FORCE_FLAG) + + if (getConfig(LIB_INJECTION_ENABLED_ENV_VAR) + && !getConfig(LIB_INJECTION_FORCE_SYS_PROP) && getAgentFilesFromVMArguments().size() > 1) { // Formatting agent file list, Java 7 style StringBuilder agentFiles = new StringBuilder(); @@ -305,7 +309,7 @@ && getAgentFilesFromVMArguments().size() > 1) { "Info: multiple JVM agents detected, found " + agentFiles + ". Loading multiple APM/Tracing agent is not a recommended or supported configuration." - + "Please set the DD_INJECT_FORCE configuration to TRUE to load Datadog APM/Tracing agent."); + + "Please set the environment variable DD_INJECT_FORCE or the system property dd.inject.force to TRUE to load Datadog APM/Tracing agent."); return true; } return false; diff --git a/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java b/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java index 73db1f90b2a..1ad66462da1 100644 --- a/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java +++ b/dd-java-agent/src/main/java/datadog/trace/bootstrap/SystemUtils.java @@ -30,4 +30,16 @@ public static String getPropertyOrDefault(String property, String defaultValue) return defaultValue; } } + + private static String toEnvVar(String string) { + return string.replace('.', '_').replace('-', '_').toUpperCase(); + } + + public static String getPropertyOrEnvVar(String property) { + String envVarValue = System.getenv(toEnvVar(property)); + if (envVarValue != null) { + return envVarValue; + } + return System.getProperty(property); + } }