diff --git a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/AIAgentXmlLoader.java b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/AIAgentXmlLoader.java index cf2f83d23f6..3720f78e840 100644 --- a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/AIAgentXmlLoader.java +++ b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/AIAgentXmlLoader.java @@ -119,8 +119,18 @@ static Map> getInstrumentationConfig(BuiltInInstrume jdbcConfiguration.put("captureGetConnection", false); jdbcConfiguration.put("explainPlanThresholdMillis", builtInConfiguration.getQueryPlanThresholdInMS()); + String loggingThreshold = builtInConfiguration.getLoggingThreshold(); + + Map log4jConfiguration = new HashMap<>(); + log4jConfiguration.put("threshold", loggingThreshold); + + Map logbackConfiguration = new HashMap<>(); + logbackConfiguration.put("threshold", loggingThreshold); + instrumentationConfiguration.put("servlet", servletConfiguration); instrumentationConfiguration.put("jdbc", jdbcConfiguration); + instrumentationConfiguration.put("log4j", log4jConfiguration); + instrumentationConfiguration.put("logback", logbackConfiguration); return instrumentationConfiguration; } diff --git a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/BuiltInInstrumentation.java b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/BuiltInInstrumentation.java index 197753b53d9..4c9a195523f 100644 --- a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/BuiltInInstrumentation.java +++ b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/BuiltInInstrumentation.java @@ -32,6 +32,7 @@ public class BuiltInInstrumentation { private final boolean jdbcEnabled; private final boolean loggingEnabled; + private final String loggingThreshold; private final boolean jedisEnabled; @@ -43,6 +44,7 @@ public BuiltInInstrumentation(boolean enabled, boolean w3cBackCompatEnabled, boolean jdbcEnabled, boolean loggingEnabled, + String loggingThreshold, boolean jedisEnabled, long queryPlanThresholdInMS) { this.enabled = enabled; @@ -51,6 +53,7 @@ public BuiltInInstrumentation(boolean enabled, this.w3cBackCompatEnabled = w3cBackCompatEnabled; this.jdbcEnabled = jdbcEnabled; this.loggingEnabled = loggingEnabled; + this.loggingThreshold = loggingThreshold; this.jedisEnabled = jedisEnabled; this.queryPlanThresholdInMS = queryPlanThresholdInMS; } @@ -75,6 +78,10 @@ public boolean isJdbcEnabled() { return jdbcEnabled; } + public String getLoggingThreshold() { + return loggingThreshold; + } + public boolean isLoggingEnabled() { return loggingEnabled; } diff --git a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/BuiltInInstrumentationBuilder.java b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/BuiltInInstrumentationBuilder.java index 5c45c353740..9e584fc704d 100644 --- a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/BuiltInInstrumentationBuilder.java +++ b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/BuiltInInstrumentationBuilder.java @@ -38,6 +38,7 @@ public class BuiltInInstrumentationBuilder { private boolean jdbcEnabled; private boolean loggingEnabled; + private String loggingThreshold; private boolean jedisEnabled; @@ -54,6 +55,7 @@ public BuiltInInstrumentation create() { w3cBackCompatEnabled && enabled, jdbcEnabled && enabled, loggingEnabled && enabled, + loggingThreshold, jedisEnabled && enabled, queryPlanThresholdInMS ); @@ -73,8 +75,9 @@ public void setJdbcEnabled(boolean jdbcEnabled) { this.jdbcEnabled = jdbcEnabled; } - public void setLoggingEnabled(boolean loggingEnabled) { + public void setLoggingEnabled(boolean loggingEnabled, String loggingThreshold) { this.loggingEnabled = loggingEnabled; + this.loggingThreshold = loggingThreshold; } public void setJedisEnabled(boolean jedisEnabled) { diff --git a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlAgentConfigurationBuilder.java b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlAgentConfigurationBuilder.java index 8e2a8b6c926..2910c66797c 100644 --- a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlAgentConfigurationBuilder.java +++ b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlAgentConfigurationBuilder.java @@ -175,8 +175,9 @@ private void setBuiltInInstrumentation(AgentConfiguration agentConfiguration, builtInConfigurationBuilder.setJdbcEnabled(XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), JDBC_TAG)); nodes = builtInElement.getElementsByTagName(LOGGING_TAG); - builtInConfigurationBuilder - .setLoggingEnabled(XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), LOGGING_TAG)); + builtInConfigurationBuilder.setLoggingEnabled( + XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), LOGGING_TAG), + XmlParserUtils.getStringAttribute(XmlParserUtils.getFirst(nodes), "threshold", "warn")); nodes = builtInElement.getElementsByTagName(JEDIS_TAG); Element element = XmlParserUtils.getFirst(nodes); diff --git a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlParserUtils.java b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlParserUtils.java index 1b38d028d48..eb62ab2f6be 100644 --- a/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlParserUtils.java +++ b/agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlParserUtils.java @@ -98,6 +98,17 @@ public static long getLongAttribute(Element element, String attributeName, long return defaultValue; } + public static String getStringAttribute(Element element, String attributeName, String defaultValue) { + if (element == null) { + return defaultValue; + } + String strValue = element.getAttribute(attributeName); + if (!Strings.isNullOrEmpty(strValue)) { + return strValue; + } + return defaultValue; + } + public static Long getLong(Element element, String elementName) { if (element == null) { return null; diff --git a/test/smoke/testApps/TraceLog4j1_2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j1_2Test.java b/test/smoke/testApps/TraceLog4j1_2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j1_2Test.java index 7385132ef55..1b38699229b 100644 --- a/test/smoke/testApps/TraceLog4j1_2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j1_2Test.java +++ b/test/smoke/testApps/TraceLog4j1_2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j1_2Test.java @@ -17,44 +17,26 @@ public class TraceLog4j1_2Test extends AiSmokeTest { @TargetUri("/traceLog4j1_2") public void testTraceLog4j1_2() { - assertEquals(6, mockedIngestion.getCountForType("MessageData")); + assertEquals(3, mockedIngestion.getCountForType("MessageData")); MessageData md1 = getTelemetryDataForType(0, "MessageData"); - assertEquals("This is log4j1.2 trace.", md1.getMessage()); - assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel()); + assertEquals("This is log4j1.2 warn.", md1.getMessage()); + assertEquals(SeverityLevel.Warning, md1.getSeverityLevel()); assertEquals("Logger", md1.getProperties().get("SourceType")); - assertEquals("TRACE", md1.getProperties().get("LoggingLevel")); + assertEquals("WARN", md1.getProperties().get("LoggingLevel")); + MessageData md2 = getTelemetryDataForType(1, "MessageData"); - assertEquals("This is log4j1.2 debug.", md2.getMessage()); - assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel()); + assertEquals("This is log4j1.2 error.", md2.getMessage()); + assertEquals(SeverityLevel.Error, md2.getSeverityLevel()); assertEquals("Logger", md2.getProperties().get("SourceType")); - assertEquals("DEBUG", md2.getProperties().get("LoggingLevel")); + assertEquals("ERROR", md2.getProperties().get("LoggingLevel")); MessageData md3 = getTelemetryDataForType(2, "MessageData"); - assertEquals("This is log4j1.2 info.", md3.getMessage()); - assertEquals(SeverityLevel.Information, md3.getSeverityLevel()); + assertEquals("This is log4j1.2 fatal.", md3.getMessage()); + assertEquals(SeverityLevel.Critical, md3.getSeverityLevel()); assertEquals("Logger", md3.getProperties().get("SourceType")); - assertEquals("INFO", md3.getProperties().get("LoggingLevel")); - - MessageData md4 = getTelemetryDataForType(3, "MessageData"); - assertEquals("This is log4j1.2 warn.", md4.getMessage()); - assertEquals(SeverityLevel.Warning, md4.getSeverityLevel()); - assertEquals("Logger", md4.getProperties().get("SourceType")); - assertEquals("WARN", md4.getProperties().get("LoggingLevel")); - - - MessageData md5 = getTelemetryDataForType(4, "MessageData"); - assertEquals("This is log4j1.2 error.", md5.getMessage()); - assertEquals(SeverityLevel.Error, md5.getSeverityLevel()); - assertEquals("Logger", md5.getProperties().get("SourceType")); - assertEquals("ERROR", md5.getProperties().get("LoggingLevel")); - - MessageData md6 = getTelemetryDataForType(5, "MessageData"); - assertEquals("This is log4j1.2 fatal.", md6.getMessage()); - assertEquals(SeverityLevel.Critical, md6.getSeverityLevel()); - assertEquals("Logger", md6.getProperties().get("SourceType")); - assertEquals("FATAL", md6.getProperties().get("LoggingLevel")); + assertEquals("FATAL", md3.getProperties().get("LoggingLevel")); } @Test diff --git a/test/smoke/testApps/TraceLog4j2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j2Test.java b/test/smoke/testApps/TraceLog4j2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j2Test.java index 64cca26af1d..e7d2c53b5ba 100644 --- a/test/smoke/testApps/TraceLog4j2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j2Test.java +++ b/test/smoke/testApps/TraceLog4j2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j2Test.java @@ -17,44 +17,25 @@ public class TraceLog4j2Test extends AiSmokeTest { @Test @TargetUri("/traceLog4j2") public void testTraceLog4j2() { - assertEquals(6, mockedIngestion.getCountForType("MessageData")); + assertEquals(3, mockedIngestion.getCountForType("MessageData")); MessageData md1 = getTelemetryDataForType(0, "MessageData"); - assertEquals("This is log4j2 trace.", md1.getMessage()); - assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel()); + assertEquals("This is log4j2 warn.", md1.getMessage()); + assertEquals(SeverityLevel.Warning, md1.getSeverityLevel()); assertEquals("Logger", md1.getProperties().get("SourceType")); - assertEquals("TRACE", md1.getProperties().get("LoggingLevel")); + assertEquals("WARN", md1.getProperties().get("LoggingLevel")); MessageData md2 = getTelemetryDataForType(1, "MessageData"); - assertEquals("This is log4j2 debug.", md2.getMessage()); - assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel()); + assertEquals("This is log4j2 error.", md2.getMessage()); + assertEquals(SeverityLevel.Error, md2.getSeverityLevel()); assertEquals("Logger", md2.getProperties().get("SourceType")); - assertEquals("DEBUG", md2.getProperties().get("LoggingLevel")); + assertEquals("ERROR", md2.getProperties().get("LoggingLevel")); MessageData md3 = getTelemetryDataForType(2, "MessageData"); - assertEquals("This is log4j2 info.", md3.getMessage()); - assertEquals(SeverityLevel.Information, md3.getSeverityLevel()); + assertEquals("This is log4j2 fatal.", md3.getMessage()); + assertEquals(SeverityLevel.Critical, md3.getSeverityLevel()); assertEquals("Logger", md3.getProperties().get("SourceType")); - assertEquals("INFO", md3.getProperties().get("LoggingLevel")); - - MessageData md4 = getTelemetryDataForType(3, "MessageData"); - assertEquals("This is log4j2 warn.", md4.getMessage()); - assertEquals(SeverityLevel.Warning, md4.getSeverityLevel()); - assertEquals("Logger", md4.getProperties().get("SourceType")); - assertEquals("WARN", md4.getProperties().get("LoggingLevel")); - - - MessageData md5 = getTelemetryDataForType(4, "MessageData"); - assertEquals("This is log4j2 error.", md5.getMessage()); - assertEquals(SeverityLevel.Error, md5.getSeverityLevel()); - assertEquals("Logger", md5.getProperties().get("SourceType")); - assertEquals("ERROR", md5.getProperties().get("LoggingLevel")); - - MessageData md6 = getTelemetryDataForType(5, "MessageData"); - assertEquals("This is log4j2 fatal.", md6.getMessage()); - assertEquals(SeverityLevel.Critical, md6.getSeverityLevel()); - assertEquals("Logger", md6.getProperties().get("SourceType")); - assertEquals("FATAL", md6.getProperties().get("LoggingLevel")); + assertEquals("FATAL", md3.getProperties().get("LoggingLevel")); } @Test diff --git a/test/smoke/testApps/TraceLogBackUsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLogBackTest.java b/test/smoke/testApps/TraceLogBackUsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLogBackTest.java index 66e97e59e0e..485336f0167 100644 --- a/test/smoke/testApps/TraceLogBackUsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLogBackTest.java +++ b/test/smoke/testApps/TraceLogBackUsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLogBackTest.java @@ -25,37 +25,19 @@ public void skipJbosseap6AndJbosseap7Image() { @Test @TargetUri("/traceLogBack") public void testTraceLogBack() { - assertEquals(5, mockedIngestion.getCountForType("MessageData")); + assertEquals(2, mockedIngestion.getCountForType("MessageData")); MessageData md1 = getTelemetryDataForType(0, "MessageData"); - assertEquals("This is logback trace.", md1.getMessage()); - assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel()); + assertEquals("This is logback warn.", md1.getMessage()); + assertEquals(SeverityLevel.Warning, md1.getSeverityLevel()); assertEquals("Logger", md1.getProperties().get("SourceType")); - assertEquals("TRACE", md1.getProperties().get("LoggingLevel")); + assertEquals("WARN", md1.getProperties().get("LoggingLevel")); MessageData md2 = getTelemetryDataForType(1, "MessageData"); - assertEquals("This is logback debug.", md2.getMessage()); - assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel()); + assertEquals("This is logback error.", md2.getMessage()); + assertEquals(SeverityLevel.Error, md2.getSeverityLevel()); assertEquals("Logger", md2.getProperties().get("SourceType")); - assertEquals("DEBUG", md2.getProperties().get("LoggingLevel")); - - MessageData md3 = getTelemetryDataForType(2, "MessageData"); - assertEquals("This is logback info.", md3.getMessage()); - assertEquals(SeverityLevel.Information, md3.getSeverityLevel()); - assertEquals("Logger", md3.getProperties().get("SourceType")); - assertEquals("INFO", md3.getProperties().get("LoggingLevel")); - - MessageData md4 = getTelemetryDataForType(3, "MessageData"); - assertEquals("This is logback warn.", md4.getMessage()); - assertEquals(SeverityLevel.Warning, md4.getSeverityLevel()); - assertEquals("Logger", md4.getProperties().get("SourceType")); - assertEquals("WARN", md4.getProperties().get("LoggingLevel")); - - MessageData md5 = getTelemetryDataForType(4, "MessageData"); - assertEquals("This is logback error.", md5.getMessage()); - assertEquals(SeverityLevel.Error, md5.getSeverityLevel()); - assertEquals("Logger", md5.getProperties().get("SourceType")); - assertEquals("ERROR", md5.getProperties().get("LoggingLevel")); + assertEquals("ERROR", md2.getProperties().get("LoggingLevel")); } @Test