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")); + } + } +}