diff --git a/pom.xml b/pom.xml
index 08e3b89..8d891bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,6 +121,20 @@
slf4j-simple
2.0.16
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 6.0.1
+ test
+
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 6.0.1
+ test
+
@@ -143,24 +157,11 @@
1.8
+
org.apache.maven.plugins
maven-shade-plugin
3.6.0
-
- false
-
-
- *:*
-
- module-info.class
- META-INF/*
- META-INF/versions/**
- META-INF/services/**
-
-
-
-
package
@@ -168,6 +169,25 @@
shade
+ false
+
+
+ *:*
+
+
+ module-info.class
+ META-INF/*
+ META-INF/versions/**
+ META-INF/maven/org.slf4j/**
+ META-INF/maven/**/pom.xml
+
+
+
org.slf4j
@@ -175,6 +195,8 @@
+
@@ -189,6 +211,12 @@
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.4
+
diff --git a/src/main/java/com/datadog/ServerlessCompatAgent.java b/src/main/java/com/datadog/ServerlessCompatAgent.java
index 8d08959..b3732f4 100644
--- a/src/main/java/com/datadog/ServerlessCompatAgent.java
+++ b/src/main/java/com/datadog/ServerlessCompatAgent.java
@@ -10,6 +10,7 @@
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.NOPLogger;
enum CloudEnvironment {
AZURE_FUNCTION,
@@ -19,7 +20,24 @@ enum CloudEnvironment {
}
public class ServerlessCompatAgent {
- private static final Logger log = LoggerFactory.getLogger(ServerlessCompatAgent.class);
+ private static final String ddLogLevel = System.getenv().getOrDefault("DD_LOG_LEVEL", "INFO").toUpperCase();
+
+ private static final Logger log = initLogger(ddLogLevel);
+
+ private static Logger initLogger(String logLevel) {
+ if ("OFF".equals(logLevel)) {
+ return NOPLogger.NOP_LOGGER;
+ } else {
+ System.setProperty("org.slf4j.simpleLogger.defaultLogLevel",
+ mapDdLogLevelToSlf4jLogLevel(logLevel));
+ return LoggerFactory.getLogger(ServerlessCompatAgent.class);
+ }
+ }
+
+ private static String mapDdLogLevelToSlf4jLogLevel(String ddLogLevel) {
+ return "CRITICAL".equals(ddLogLevel) ? "ERROR" : ddLogLevel;
+ }
+
private static final String os = System.getProperty("os.name").toLowerCase();
private static final String binaryPath = System.getenv("DD_SERVERLESS_COMPAT_PATH");
@@ -65,7 +83,8 @@ public static String getPackageVersion() {
}
public static boolean isAzureFlexWithoutDDAzureResourceGroup() {
- return "FlexConsumption".equals(System.getenv("WEBSITE_SKU")) && System.getenv("DD_AZURE_RESOURCE_GROUP") == null;
+ return "FlexConsumption".equals(System.getenv("WEBSITE_SKU"))
+ && System.getenv("DD_AZURE_RESOURCE_GROUP") == null;
}
public static void premain(String agentArgs, Instrumentation instrumentation) {
@@ -94,11 +113,13 @@ public static void premain(String agentArgs, Instrumentation instrumentation) {
return;
}
- // Check for Azure Flex Consumption functions that don't have the DD_AZURE_RESOURCE_GROUP environment variable set
+ // Check for Azure Flex Consumption functions that don't have the
+ // DD_AZURE_RESOURCE_GROUP environment variable set
if (environment == CloudEnvironment.AZURE_FUNCTION && isAzureFlexWithoutDDAzureResourceGroup()) {
- log.error("Azure function detected on flex consumption plan without DD_AZURE_RESOURCE_GROUP set. Please set the DD_AZURE_RESOURCE_GROUP environment variable to your resource group name in Azure app settings. Shutting down Datadog Serverless Compatibility Layer.");
+ log.error(
+ "Azure function detected on flex consumption plan without DD_AZURE_RESOURCE_GROUP set. Please set the DD_AZURE_RESOURCE_GROUP environment variable to your resource group name in Azure app settings. Shutting down Datadog Serverless Compatibility Layer.");
return;
- }
+ }
try (InputStream inputStream = ServerlessCompatAgent.class.getClassLoader()
.getResourceAsStream(fileName)) {
diff --git a/src/test/java/test.java b/src/test/java/test.java
new file mode 100644
index 0000000..60078b5
--- /dev/null
+++ b/src/test/java/test.java
@@ -0,0 +1,34 @@
+import com.datadog.ServerlessCompatAgent;
+import java.lang.reflect.Method;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.slf4j.Logger;
+import org.slf4j.helpers.NOPLogger;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ServerlessCompatAgentTest {
+
+ @ParameterizedTest
+ @CsvSource({
+ "TRACE, TRACE",
+ "DEBUG, DEBUG",
+ "INFO, INFO",
+ "WARN, WARN",
+ "ERROR, ERROR",
+ "CRITICAL, ERROR",
+ "OFF, null"
+ })
+ void testInitLogger(String ddLogLevel, String expectedSlf4jLevel) throws Exception {
+ Method initLoggerMethod = ServerlessCompatAgent.class.getDeclaredMethod("initLogger", String.class);
+ initLoggerMethod.setAccessible(true);
+ Logger logger = (Logger) initLoggerMethod.invoke(null, ddLogLevel);
+
+ if ("OFF".equals(ddLogLevel)) {
+ assertTrue(logger instanceof NOPLogger);
+ } else {
+ assertEquals(expectedSlf4jLevel,
+ System.getProperty("org.slf4j.simpleLogger.defaultLogLevel"));
+ }
+ }
+}