Skip to content

Commit 27d9902

Browse files
committed
Support custom exception handling
1 parent db6e9bd commit 27d9902

File tree

4 files changed

+44
-32
lines changed
  • instrumentation
    • jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1
    • log4j
      • log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2
      • log4j-appender-2.17/library/src/main/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/internal
    • logback/logback-appender-1.0/library/src/main/java/io/opentelemetry/instrumentation/logback/appender/v1_0/internal

4 files changed

+44
-32
lines changed

instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.opentelemetry.api.logs.LogRecordBuilder;
1616
import io.opentelemetry.api.logs.Severity;
1717
import io.opentelemetry.context.Context;
18+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
1819
import io.opentelemetry.instrumentation.api.internal.cache.Cache;
1920
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
2021
import io.opentelemetry.semconv.ExceptionAttributes;
@@ -81,13 +82,15 @@ public void capture(Logger logger, ExtLogRecord record) {
8182

8283
Throwable throwable = record.getThrown();
8384
if (throwable != null) {
84-
// TODO (trask) extract method for recording exception into
85-
// io.opentelemetry:opentelemetry-api
86-
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
87-
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
88-
StringWriter writer = new StringWriter();
89-
throwable.printStackTrace(new PrintWriter(writer));
90-
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
85+
if (builder instanceof ExtendedLogRecordBuilder) {
86+
((ExtendedLogRecordBuilder) builder).setException(throwable);
87+
} else {
88+
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
89+
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
90+
StringWriter writer = new StringWriter();
91+
throwable.printStackTrace(new PrintWriter(writer));
92+
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
93+
}
9194
}
9295
captureMdcAttributes(attributes);
9396

instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.api.logs.LogRecordBuilder;
1515
import io.opentelemetry.api.logs.Severity;
1616
import io.opentelemetry.context.Context;
17+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
1718
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1819
import io.opentelemetry.instrumentation.api.internal.cache.Cache;
1920
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
@@ -101,13 +102,15 @@ public void capture(
101102

102103
// throwable
103104
if (throwable != null) {
104-
// TODO (trask) extract method for recording exception into
105-
// io.opentelemetry:opentelemetry-api
106-
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
107-
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
108-
StringWriter writer = new StringWriter();
109-
throwable.printStackTrace(new PrintWriter(writer));
110-
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
105+
if (builder instanceof ExtendedLogRecordBuilder) {
106+
((ExtendedLogRecordBuilder) builder).setException(throwable);
107+
} else {
108+
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
109+
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
110+
StringWriter writer = new StringWriter();
111+
throwable.printStackTrace(new PrintWriter(writer));
112+
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
113+
}
111114
}
112115

113116
captureMdcAttributes(attributes);

instrumentation/log4j/log4j-appender-2.17/library/src/main/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/internal/LogEventMapper.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.opentelemetry.api.common.AttributeKey;
99
import io.opentelemetry.api.common.Attributes;
1010
import io.opentelemetry.api.common.AttributesBuilder;
11+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
1112
import io.opentelemetry.api.logs.LogRecordBuilder;
1213
import io.opentelemetry.api.logs.Severity;
1314
import io.opentelemetry.context.Context;
@@ -117,7 +118,7 @@ public void mapLogEvent(
117118
}
118119

119120
if (throwable != null) {
120-
setThrowable(attributes, throwable);
121+
setThrowable(builder, attributes, throwable);
121122
}
122123

123124
captureContextDataAttributes(attributes, contextData);
@@ -233,14 +234,16 @@ public static AttributeKey<String> getMapMessageAttributeKey(String key) {
233234
key, k -> AttributeKey.stringKey("log4j.map_message." + k));
234235
}
235236

236-
private static void setThrowable(AttributesBuilder attributes, Throwable throwable) {
237-
// TODO (trask) extract method for recording exception into
238-
// io.opentelemetry:opentelemetry-api
239-
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
240-
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
241-
StringWriter writer = new StringWriter();
242-
throwable.printStackTrace(new PrintWriter(writer));
243-
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
237+
private static void setThrowable(LogRecordBuilder builder, AttributesBuilder attributes, Throwable throwable) {
238+
if (builder instanceof ExtendedLogRecordBuilder) {
239+
((ExtendedLogRecordBuilder) builder).setException(throwable);
240+
} else {
241+
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
242+
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
243+
StringWriter writer = new StringWriter();
244+
throwable.printStackTrace(new PrintWriter(writer));
245+
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
246+
}
244247
}
245248

246249
private static Severity levelToSeverity(Level level) {

instrumentation/logback/logback-appender-1.0/library/src/main/java/io/opentelemetry/instrumentation/logback/appender/v1_0/internal/LoggingEventMapper.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.opentelemetry.api.common.AttributeKey;
1818
import io.opentelemetry.api.common.Attributes;
1919
import io.opentelemetry.api.common.AttributesBuilder;
20+
import io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
2021
import io.opentelemetry.api.logs.LogRecordBuilder;
2122
import io.opentelemetry.api.logs.LoggerProvider;
2223
import io.opentelemetry.api.logs.Severity;
@@ -147,7 +148,7 @@ private void mapLoggingEvent(
147148
throwable = ((ThrowableProxy) throwableProxy).getThrowable();
148149
}
149150
if (throwable != null) {
150-
setThrowable(attributes, throwable);
151+
setThrowable(builder, attributes, throwable);
151152
}
152153

153154
captureMdcAttributes(attributes, loggingEvent.getMDCPropertyMap());
@@ -269,14 +270,16 @@ public static AttributeKey<String> getMdcAttributeKey(String key) {
269270
return mdcAttributeKeys.computeIfAbsent(key, AttributeKey::stringKey);
270271
}
271272

272-
private static void setThrowable(AttributesBuilder attributes, Throwable throwable) {
273-
// TODO (trask) extract method for recording exception into
274-
// io.opentelemetry:opentelemetry-api
275-
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
276-
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
277-
StringWriter writer = new StringWriter();
278-
throwable.printStackTrace(new PrintWriter(writer));
279-
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
273+
private static void setThrowable(LogRecordBuilder builder, AttributesBuilder attributes, Throwable throwable) {
274+
if (builder instanceof ExtendedLogRecordBuilder) {
275+
((ExtendedLogRecordBuilder) builder).setException(throwable);
276+
} else {
277+
attributes.put(ExceptionAttributes.EXCEPTION_TYPE, throwable.getClass().getName());
278+
attributes.put(ExceptionAttributes.EXCEPTION_MESSAGE, throwable.getMessage());
279+
StringWriter writer = new StringWriter();
280+
throwable.printStackTrace(new PrintWriter(writer));
281+
attributes.put(ExceptionAttributes.EXCEPTION_STACKTRACE, writer.toString());
282+
}
280283
}
281284

282285
private static Severity levelToSeverity(Level level) {

0 commit comments

Comments
 (0)