Skip to content

Commit

Permalink
Add thread name to log capture (#1790)
Browse files Browse the repository at this point in the history
  • Loading branch information
trask authored Jul 7, 2021
1 parent dac9c53 commit 48b7ace
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -341,12 +341,13 @@ private void trackMessage(SpanData span) {
// set message-specific properties
String level = attributes.get(AI_LOG_LEVEL_KEY);
String loggerName = attributes.get(AI_LOGGER_NAME_KEY);
String threadName = attributes.get(SemanticAttributes.THREAD_NAME);

data.setVersion(2);
data.setSeverityLevel(toSeverityLevel(level));
data.setMessage(span.getName());

setLoggerProperties(data, level, loggerName);
setLoggerProperties(data, level, loggerName, threadName);

// export
telemetryClient.trackAsync(telemetry);
Expand All @@ -367,11 +368,12 @@ private void trackTraceAsException(SpanData span, String errorStack) {
// set exception-specific properties
String level = attributes.get(AI_LOG_LEVEL_KEY);
String loggerName = attributes.get(AI_LOGGER_NAME_KEY);
String threadName = attributes.get(SemanticAttributes.THREAD_NAME);

data.setExceptions(Exceptions.minimalParse(errorStack));
data.setSeverityLevel(toSeverityLevel(level));
TelemetryUtil.getProperties(data).put("Logger Message", span.getName());
setLoggerProperties(data, level, loggerName);
setLoggerProperties(data, level, loggerName, threadName);

// export
telemetryClient.trackAsync(telemetry);
Expand All @@ -389,7 +391,8 @@ private static void setOperationTags(
}
}

private static void setLoggerProperties(MonitorDomain data, String level, String loggerName) {
private static void setLoggerProperties(
MonitorDomain data, String level, String loggerName, String threadName) {
if (level != null) {
// TODO are these needed? level is already reported as severityLevel, sourceType maybe needed
// for exception telemetry only?
Expand All @@ -400,6 +403,9 @@ private static void setLoggerProperties(MonitorDomain data, String level, String
if (loggerName != null) {
TelemetryUtil.getProperties(data).put("LoggerName", loggerName);
}
if (threadName != null) {
TelemetryUtil.getProperties(data).put("ThreadName", threadName);
}
}

private static void applyHttpClientSpan(Attributes attributes, RemoteDependencyData telemetry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,16 @@ public void testTraceJavaUtilLogging() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARNING", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertEquals(3, md1.getProperties().size());
assertNotNull(md1.getProperties().get("ThreadName"));
assertEquals(4, md1.getProperties().size());

assertEquals("This is jul severe.", md2.getMessage());
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("SEVERE", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertParentChild(
rd, rdEnvelope, mdEnvelope1, "GET /TraceJavaUtilLoggingUsingAgent/traceJavaUtilLogging");
Expand Down Expand Up @@ -99,7 +101,8 @@ public void testTraceJavaUtilLoggingWithExeption() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("SEVERE", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertEquals(4, ed.getProperties().size());
assertNotNull(ed.getProperties().get("ThreadName"));
assertEquals(5, ed.getProperties().size());

assertParentChild(
rd,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,28 +64,31 @@ public void testTraceLog4j12() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
// TODO (trask) revisit after Java 17 release
// MDC.getContext() always returns null on Java 17-ea
if (!currentImageName.contains("_openjdk_17")) {
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(4, md1.getProperties().size());
assertEquals(5, md1.getProperties().size());
} else {
assertEquals(3, md1.getProperties().size());
assertEquals(4, md1.getProperties().size());
}

assertEquals("This is log4j1.2 error.", md2.getMessage());
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md2.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertEquals("This is log4j1.2 fatal.", md3.getMessage());
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
assertEquals("Logger", md3.getProperties().get("SourceType"));
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md3.getProperties().get("LoggerName"));
assertEquals(3, md3.getProperties().size());
assertNotNull(md3.getProperties().get("ThreadName"));
assertEquals(4, md3.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLog4j1_2/traceLog4j12");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLog4j1_2/traceLog4j12");
Expand Down Expand Up @@ -117,13 +120,14 @@ public void testTraceLog4j1_2WithExeption() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
// TODO (trask) revisit after Java 17 release
// MDC.getContext() always returns null on Java 17-ea
if (!currentImageName.contains("_openjdk_17")) {
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(5, ed.getProperties().size());
assertEquals(6, ed.getProperties().size());
} else {
assertEquals(4, ed.getProperties().size());
assertEquals(5, ed.getProperties().size());
}

assertParentChild(rd, rdEnvelope, edEnvelope, "GET /TraceLog4j1_2/traceLog4j1_2WithException");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,28 +64,31 @@ public void testTraceLog4j12() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
// TODO (trask) revisit after Java 17 release
// MDC.getContext() always returns null on Java 17-ea
if (!currentImageName.contains("_openjdk_17")) {
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(4, md1.getProperties().size());
assertEquals(5, md1.getProperties().size());
} else {
assertEquals(3, md1.getProperties().size());
assertEquals(4, md1.getProperties().size());
}

assertEquals("This is log4j1.2 error.", md2.getMessage());
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md2.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertEquals("This is log4j1.2 fatal.", md3.getMessage());
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
assertEquals("Logger", md3.getProperties().get("SourceType"));
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md3.getProperties().get("LoggerName"));
assertEquals(3, md3.getProperties().size());
assertNotNull(md3.getProperties().get("ThreadName"));
assertEquals(4, md3.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLog4j1_2UsingAgent/traceLog4j12");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLog4j1_2UsingAgent/traceLog4j12");
Expand Down Expand Up @@ -117,13 +120,14 @@ public void testTraceLog4j1_2WithExeption() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
// TODO (trask) revisit after Java 17 release
// MDC.getContext() always returns null on Java 17-ea
if (!currentImageName.contains("_openjdk_17")) {
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(5, ed.getProperties().size());
assertEquals(6, ed.getProperties().size());
} else {
assertEquals(4, ed.getProperties().size());
assertEquals(5, ed.getProperties().size());
}

assertParentChild(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,25 @@ public void testTraceLog4j2() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(4, md1.getProperties().size());
assertEquals(5, md1.getProperties().size());

assertEquals("This is log4j2 error.", md2.getMessage());
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md2.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertEquals("This is log4j2 fatal.", md3.getMessage());
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
assertEquals("Logger", md3.getProperties().get("SourceType"));
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md3.getProperties().get("LoggerName"));
assertEquals(3, md3.getProperties().size());
assertNotNull(md3.getProperties().get("ThreadName"));
assertEquals(4, md3.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLog4j2/traceLog4j2");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLog4j2/traceLog4j2");
Expand Down Expand Up @@ -111,7 +114,10 @@ public void testTraceLog4j2WithException() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(6, ed.getProperties().size());

assertParentChild(rd, rdEnvelope, edEnvelope, "GET /TraceLog4j2/traceLog4j2WithException");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,25 @@ public void testTraceLog4j2() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(4, md1.getProperties().size());
assertEquals(5, md1.getProperties().size());

assertEquals("This is log4j2 error.", md2.getMessage());
assertEquals(SeverityLevel.Error, md2.getSeverityLevel());
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md1.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertEquals("This is log4j2 fatal.", md3.getMessage());
assertEquals(SeverityLevel.Critical, md3.getSeverityLevel());
assertEquals("Logger", md3.getProperties().get("SourceType"));
assertEquals("FATAL", md3.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md3.getProperties().get("LoggerName"));
assertEquals(3, md3.getProperties().size());
assertNotNull(md3.getProperties().get("ThreadName"));
assertEquals(4, md3.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLog4j2UsingAgent/traceLog4j2");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLog4j2UsingAgent/traceLog4j2");
Expand Down Expand Up @@ -111,8 +114,9 @@ public void testTraceLog4j2WithException() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(5, ed.getProperties().size());
assertEquals(6, ed.getProperties().size());

assertParentChild(
rd, rdEnvelope, edEnvelope, "GET /TraceLog4j2UsingAgent/traceLog4j2WithException");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,12 @@ public void testTraceLogBack() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
// TODO add MDC instrumentation for jboss logging
if (currentImageName.contains("wildfly")) {
assertEquals(3, md1.getProperties().size());
} else {
if (!currentImageName.contains("wildfly")) {
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(5, md1.getProperties().size());
} else {
assertEquals(4, md1.getProperties().size());
}

Expand All @@ -74,7 +75,8 @@ public void testTraceLogBack() throws Exception {
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md2.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLogBack/traceLogBack");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLogBack/traceLogBack");
Expand Down Expand Up @@ -102,11 +104,12 @@ public void testTraceLogBackWithExeption() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
// TODO add MDC instrumentation for jboss logging
if (currentImageName.contains("wildfly")) {
assertEquals(4, ed.getProperties().size());
} else {
if (!currentImageName.contains("wildfly")) {
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(6, ed.getProperties().size());
} else {
assertEquals(5, ed.getProperties().size());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,12 @@ public void testTraceLogBack() throws Exception {
assertEquals("Logger", md1.getProperties().get("SourceType"));
assertEquals("WARN", md1.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md1.getProperties().get("LoggerName"));
assertNotNull(md1.getProperties().get("ThreadName"));
// TODO add MDC instrumentation for jboss logging
if (currentImageName.contains("wildfly")) {
assertEquals(3, md1.getProperties().size());
} else {
if (!currentImageName.contains("wildfly")) {
assertEquals("MDC value", md1.getProperties().get("MDC key"));
assertEquals(5, md1.getProperties().size());
} else {
assertEquals(4, md1.getProperties().size());
}

Expand All @@ -74,7 +75,8 @@ public void testTraceLogBack() throws Exception {
assertEquals("Logger", md2.getProperties().get("SourceType"));
assertEquals("ERROR", md2.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", md2.getProperties().get("LoggerName"));
assertEquals(3, md2.getProperties().size());
assertNotNull(md2.getProperties().get("ThreadName"));
assertEquals(4, md2.getProperties().size());

assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /TraceLogBackUsingAgent/traceLogBack");
assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /TraceLogBackUsingAgent/traceLogBack");
Expand Down Expand Up @@ -102,11 +104,12 @@ public void testTraceLogBackWithExeption() throws Exception {
assertEquals("Logger", ed.getProperties().get("SourceType"));
assertEquals("ERROR", ed.getProperties().get("LoggingLevel"));
assertEquals("smoketestapp", ed.getProperties().get("LoggerName"));
assertNotNull(ed.getProperties().get("ThreadName"));
// TODO add MDC instrumentation for jboss logging
if (currentImageName.contains("wildfly")) {
assertEquals(4, ed.getProperties().size());
} else {
if (!currentImageName.contains("wildfly")) {
assertEquals("MDC value", ed.getProperties().get("MDC key"));
assertEquals(6, ed.getProperties().size());
} else {
assertEquals(5, ed.getProperties().size());
}

Expand Down

0 comments on commit 48b7ace

Please sign in to comment.