Skip to content

Commit 7819229

Browse files
authored
Merge pull request #1026 from microsoft/add-logging-capture-threshold
Add logging capture threshold
2 parents 543043b + c90ade8 commit 7819229

File tree

8 files changed

+67
-89
lines changed

8 files changed

+67
-89
lines changed

agent/src/main/java/com/microsoft/applicationinsights/agent/internal/AIAgentXmlLoader.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,19 @@ static Map<String, Map<String, Object>> getInstrumentationConfig(BuiltInInstrume
119119
jdbcConfiguration.put("captureGetConnection", false);
120120
jdbcConfiguration.put("explainPlanThresholdMillis", builtInConfiguration.getQueryPlanThresholdInMS());
121121

122+
// must be one of trace, debug, info, warn, error (which are supported by both log4j and logback)
123+
String loggingThreshold = builtInConfiguration.getLoggingThreshold();
124+
125+
Map<String, Object> log4jConfiguration = new HashMap<>();
126+
log4jConfiguration.put("threshold", loggingThreshold);
127+
128+
Map<String, Object> logbackConfiguration = new HashMap<>();
129+
logbackConfiguration.put("threshold", loggingThreshold);
130+
122131
instrumentationConfiguration.put("servlet", servletConfiguration);
123132
instrumentationConfiguration.put("jdbc", jdbcConfiguration);
133+
instrumentationConfiguration.put("log4j", log4jConfiguration);
134+
instrumentationConfiguration.put("logback", logbackConfiguration);
124135

125136
return instrumentationConfiguration;
126137
}

agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/BuiltInInstrumentation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class BuiltInInstrumentation {
3232
private final boolean jdbcEnabled;
3333

3434
private final boolean loggingEnabled;
35+
private final String loggingThreshold;
3536

3637
private final boolean jedisEnabled;
3738

@@ -43,6 +44,7 @@ public BuiltInInstrumentation(boolean enabled,
4344
boolean w3cBackCompatEnabled,
4445
boolean jdbcEnabled,
4546
boolean loggingEnabled,
47+
String loggingThreshold,
4648
boolean jedisEnabled,
4749
long queryPlanThresholdInMS) {
4850
this.enabled = enabled;
@@ -51,6 +53,7 @@ public BuiltInInstrumentation(boolean enabled,
5153
this.w3cBackCompatEnabled = w3cBackCompatEnabled;
5254
this.jdbcEnabled = jdbcEnabled;
5355
this.loggingEnabled = loggingEnabled;
56+
this.loggingThreshold = loggingThreshold;
5457
this.jedisEnabled = jedisEnabled;
5558
this.queryPlanThresholdInMS = queryPlanThresholdInMS;
5659
}
@@ -75,6 +78,10 @@ public boolean isJdbcEnabled() {
7578
return jdbcEnabled;
7679
}
7780

81+
public String getLoggingThreshold() {
82+
return loggingThreshold;
83+
}
84+
7885
public boolean isLoggingEnabled() {
7986
return loggingEnabled;
8087
}

agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/BuiltInInstrumentationBuilder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class BuiltInInstrumentationBuilder {
3838
private boolean jdbcEnabled;
3939

4040
private boolean loggingEnabled;
41+
private String loggingThreshold;
4142

4243
private boolean jedisEnabled;
4344

@@ -54,6 +55,7 @@ public BuiltInInstrumentation create() {
5455
w3cBackCompatEnabled && enabled,
5556
jdbcEnabled && enabled,
5657
loggingEnabled && enabled,
58+
loggingThreshold,
5759
jedisEnabled && enabled,
5860
queryPlanThresholdInMS
5961
);
@@ -73,8 +75,9 @@ public void setJdbcEnabled(boolean jdbcEnabled) {
7375
this.jdbcEnabled = jdbcEnabled;
7476
}
7577

76-
public void setLoggingEnabled(boolean loggingEnabled) {
78+
public void setLoggingEnabled(boolean loggingEnabled, String loggingThreshold) {
7779
this.loggingEnabled = loggingEnabled;
80+
this.loggingThreshold = loggingThreshold;
7881
}
7982

8083
public void setJedisEnabled(boolean jedisEnabled) {

agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlAgentConfigurationBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,9 @@ private void setBuiltInInstrumentation(AgentConfiguration agentConfiguration,
175175
builtInConfigurationBuilder.setJdbcEnabled(XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), JDBC_TAG));
176176

177177
nodes = builtInElement.getElementsByTagName(LOGGING_TAG);
178-
builtInConfigurationBuilder
179-
.setLoggingEnabled(XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), LOGGING_TAG));
178+
builtInConfigurationBuilder.setLoggingEnabled(
179+
XmlParserUtils.getEnabled(XmlParserUtils.getFirst(nodes), LOGGING_TAG),
180+
XmlParserUtils.getStringAttribute(XmlParserUtils.getFirst(nodes), "threshold", "warn"));
180181

181182
nodes = builtInElement.getElementsByTagName(JEDIS_TAG);
182183
Element element = XmlParserUtils.getFirst(nodes);

agent/src/main/java/com/microsoft/applicationinsights/agent/internal/config/builder/XmlParserUtils.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static Element getFirst(NodeList nodes) {
4545
return (Element) node;
4646
}
4747

48-
public static boolean getEnabled(Element element, String attributeName) {
48+
public static boolean getEnabled(Element element, String elementName) {
4949
if (element == null) {
5050
return true;
5151
}
@@ -57,7 +57,7 @@ public static boolean getEnabled(Element element, String attributeName) {
5757
return true;
5858
} catch (Exception e) {
5959
logger.error("Failed to parse attribute '{}' of '{}', default value ({}) will be used.", ENABLED_ATTRIBUTE,
60-
attributeName, true);
60+
elementName, true);
6161
}
6262
return true;
6363
}
@@ -98,6 +98,17 @@ public static long getLongAttribute(Element element, String attributeName, long
9898
return defaultValue;
9999
}
100100

101+
public static String getStringAttribute(Element element, String attributeName, String defaultValue) {
102+
if (element == null) {
103+
return defaultValue;
104+
}
105+
String strValue = element.getAttribute(attributeName);
106+
if (!Strings.isNullOrEmpty(strValue)) {
107+
return strValue;
108+
}
109+
return defaultValue;
110+
}
111+
101112
public static Long getLong(Element element, String elementName) {
102113
if (element == null) {
103114
return null;
@@ -113,7 +124,7 @@ public static Long getLong(Element element, String elementName) {
113124
}
114125
return null;
115126
} catch (Exception e) {
116-
logger.error("Failed to parse attribute '{}' of '{}'", ENABLED_ATTRIBUTE, elementName);
127+
logger.error("Failed to parse value of '{}'", elementName);
117128
}
118129
return null;
119130
}

test/smoke/testApps/TraceLog4j1_2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j1_2Test.java

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,26 @@ public class TraceLog4j1_2Test extends AiSmokeTest {
1717
@TargetUri("/traceLog4j1_2")
1818
public void testTraceLog4j1_2() {
1919

20-
assertEquals(6, mockedIngestion.getCountForType("MessageData"));
20+
assertEquals(3, mockedIngestion.getCountForType("MessageData"));
2121

2222
MessageData md1 = getTelemetryDataForType(0, "MessageData");
23-
assertEquals("This is log4j1.2 trace.", md1.getMessage());
24-
assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel());
23+
assertEquals("This is log4j1.2 warn.", md1.getMessage());
24+
assertEquals(SeverityLevel.Warning, md1.getSeverityLevel());
2525
assertEquals("Logger", md1.getProperties().get("SourceType"));
26-
assertEquals("TRACE", md1.getProperties().get("LoggingLevel"));
26+
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
27+
2728

2829
MessageData md2 = getTelemetryDataForType(1, "MessageData");
29-
assertEquals("This is log4j1.2 debug.", md2.getMessage());
30-
assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel());
30+
assertEquals("This is log4j1.2 error.", md2.getMessage());
31+
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
3132
assertEquals("Logger", md2.getProperties().get("SourceType"));
32-
assertEquals("DEBUG", md2.getProperties().get("LoggingLevel"));
33+
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
3334

3435
MessageData md3 = getTelemetryDataForType(2, "MessageData");
35-
assertEquals("This is log4j1.2 info.", md3.getMessage());
36-
assertEquals(SeverityLevel.Information, md3.getSeverityLevel());
36+
assertEquals("This is log4j1.2 fatal.", md3.getMessage());
37+
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
3738
assertEquals("Logger", md3.getProperties().get("SourceType"));
38-
assertEquals("INFO", md3.getProperties().get("LoggingLevel"));
39-
40-
MessageData md4 = getTelemetryDataForType(3, "MessageData");
41-
assertEquals("This is log4j1.2 warn.", md4.getMessage());
42-
assertEquals(SeverityLevel.Warning, md4.getSeverityLevel());
43-
assertEquals("Logger", md4.getProperties().get("SourceType"));
44-
assertEquals("WARN", md4.getProperties().get("LoggingLevel"));
45-
46-
47-
MessageData md5 = getTelemetryDataForType(4, "MessageData");
48-
assertEquals("This is log4j1.2 error.", md5.getMessage());
49-
assertEquals(SeverityLevel.Error, md5.getSeverityLevel());
50-
assertEquals("Logger", md5.getProperties().get("SourceType"));
51-
assertEquals("ERROR", md5.getProperties().get("LoggingLevel"));
52-
53-
MessageData md6 = getTelemetryDataForType(5, "MessageData");
54-
assertEquals("This is log4j1.2 fatal.", md6.getMessage());
55-
assertEquals(SeverityLevel.Critical, md6.getSeverityLevel());
56-
assertEquals("Logger", md6.getProperties().get("SourceType"));
57-
assertEquals("FATAL", md6.getProperties().get("LoggingLevel"));
39+
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
5840
}
5941

6042
@Test

test/smoke/testApps/TraceLog4j2UsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLog4j2Test.java

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,25 @@ public class TraceLog4j2Test extends AiSmokeTest {
1717
@Test
1818
@TargetUri("/traceLog4j2")
1919
public void testTraceLog4j2() {
20-
assertEquals(6, mockedIngestion.getCountForType("MessageData"));
20+
assertEquals(3, mockedIngestion.getCountForType("MessageData"));
2121

2222
MessageData md1 = getTelemetryDataForType(0, "MessageData");
23-
assertEquals("This is log4j2 trace.", md1.getMessage());
24-
assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel());
23+
assertEquals("This is log4j2 warn.", md1.getMessage());
24+
assertEquals(SeverityLevel.Warning, md1.getSeverityLevel());
2525
assertEquals("Logger", md1.getProperties().get("SourceType"));
26-
assertEquals("TRACE", md1.getProperties().get("LoggingLevel"));
26+
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
2727

2828
MessageData md2 = getTelemetryDataForType(1, "MessageData");
29-
assertEquals("This is log4j2 debug.", md2.getMessage());
30-
assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel());
29+
assertEquals("This is log4j2 error.", md2.getMessage());
30+
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
3131
assertEquals("Logger", md2.getProperties().get("SourceType"));
32-
assertEquals("DEBUG", md2.getProperties().get("LoggingLevel"));
32+
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
3333

3434
MessageData md3 = getTelemetryDataForType(2, "MessageData");
35-
assertEquals("This is log4j2 info.", md3.getMessage());
36-
assertEquals(SeverityLevel.Information, md3.getSeverityLevel());
35+
assertEquals("This is log4j2 fatal.", md3.getMessage());
36+
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
3737
assertEquals("Logger", md3.getProperties().get("SourceType"));
38-
assertEquals("INFO", md3.getProperties().get("LoggingLevel"));
39-
40-
MessageData md4 = getTelemetryDataForType(3, "MessageData");
41-
assertEquals("This is log4j2 warn.", md4.getMessage());
42-
assertEquals(SeverityLevel.Warning, md4.getSeverityLevel());
43-
assertEquals("Logger", md4.getProperties().get("SourceType"));
44-
assertEquals("WARN", md4.getProperties().get("LoggingLevel"));
45-
46-
47-
MessageData md5 = getTelemetryDataForType(4, "MessageData");
48-
assertEquals("This is log4j2 error.", md5.getMessage());
49-
assertEquals(SeverityLevel.Error, md5.getSeverityLevel());
50-
assertEquals("Logger", md5.getProperties().get("SourceType"));
51-
assertEquals("ERROR", md5.getProperties().get("LoggingLevel"));
52-
53-
MessageData md6 = getTelemetryDataForType(5, "MessageData");
54-
assertEquals("This is log4j2 fatal.", md6.getMessage());
55-
assertEquals(SeverityLevel.Critical, md6.getSeverityLevel());
56-
assertEquals("Logger", md6.getProperties().get("SourceType"));
57-
assertEquals("FATAL", md6.getProperties().get("LoggingLevel"));
38+
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
5839
}
5940

6041
@Test

test/smoke/testApps/TraceLogBackUsingAgent/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TraceLogBackTest.java

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,37 +25,19 @@ public void skipJbosseap6AndJbosseap7Image() {
2525
@Test
2626
@TargetUri("/traceLogBack")
2727
public void testTraceLogBack() {
28-
assertEquals(5, mockedIngestion.getCountForType("MessageData"));
28+
assertEquals(2, mockedIngestion.getCountForType("MessageData"));
2929

3030
MessageData md1 = getTelemetryDataForType(0, "MessageData");
31-
assertEquals("This is logback trace.", md1.getMessage());
32-
assertEquals(SeverityLevel.Verbose, md1.getSeverityLevel());
31+
assertEquals("This is logback warn.", md1.getMessage());
32+
assertEquals(SeverityLevel.Warning, md1.getSeverityLevel());
3333
assertEquals("Logger", md1.getProperties().get("SourceType"));
34-
assertEquals("TRACE", md1.getProperties().get("LoggingLevel"));
34+
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
3535

3636
MessageData md2 = getTelemetryDataForType(1, "MessageData");
37-
assertEquals("This is logback debug.", md2.getMessage());
38-
assertEquals(SeverityLevel.Verbose, md2.getSeverityLevel());
37+
assertEquals("This is logback error.", md2.getMessage());
38+
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
3939
assertEquals("Logger", md2.getProperties().get("SourceType"));
40-
assertEquals("DEBUG", md2.getProperties().get("LoggingLevel"));
41-
42-
MessageData md3 = getTelemetryDataForType(2, "MessageData");
43-
assertEquals("This is logback info.", md3.getMessage());
44-
assertEquals(SeverityLevel.Information, md3.getSeverityLevel());
45-
assertEquals("Logger", md3.getProperties().get("SourceType"));
46-
assertEquals("INFO", md3.getProperties().get("LoggingLevel"));
47-
48-
MessageData md4 = getTelemetryDataForType(3, "MessageData");
49-
assertEquals("This is logback warn.", md4.getMessage());
50-
assertEquals(SeverityLevel.Warning, md4.getSeverityLevel());
51-
assertEquals("Logger", md4.getProperties().get("SourceType"));
52-
assertEquals("WARN", md4.getProperties().get("LoggingLevel"));
53-
54-
MessageData md5 = getTelemetryDataForType(4, "MessageData");
55-
assertEquals("This is logback error.", md5.getMessage());
56-
assertEquals(SeverityLevel.Error, md5.getSeverityLevel());
57-
assertEquals("Logger", md5.getProperties().get("SourceType"));
58-
assertEquals("ERROR", md5.getProperties().get("LoggingLevel"));
40+
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
5941
}
6042

6143
@Test

0 commit comments

Comments
 (0)