Skip to content

Commit a11ac5b

Browse files
committed
Remove custom exception resolver
1 parent 7a62f68 commit a11ac5b

File tree

19 files changed

+57
-387
lines changed

19 files changed

+57
-387
lines changed

sdk/common/src/main/java/io/opentelemetry/sdk/internal/AttributeUtil.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
import io.opentelemetry.api.common.AttributeKey;
99
import io.opentelemetry.api.common.Attributes;
1010
import io.opentelemetry.api.common.AttributesBuilder;
11+
import java.io.PrintWriter;
12+
import java.io.StringWriter;
1113
import java.util.ArrayList;
1214
import java.util.List;
1315
import java.util.Map;
16+
import java.util.function.BiConsumer;
1417
import java.util.function.Predicate;
1518

1619
/**
@@ -19,6 +22,13 @@
1922
*/
2023
public final class AttributeUtil {
2124

25+
private static final AttributeKey<String> EXCEPTION_TYPE =
26+
AttributeKey.stringKey("exception.type");
27+
private static final AttributeKey<String> EXCEPTION_MESSAGE =
28+
AttributeKey.stringKey("exception.message");
29+
private static final AttributeKey<String> EXCEPTION_STACKTRACE =
30+
AttributeKey.stringKey("exception.stacktrace");
31+
2232
private AttributeUtil() {}
2333

2434
/**
@@ -95,4 +105,26 @@ public static Object applyAttributeLengthLimit(Object value, int lengthLimit) {
95105
}
96106
return value;
97107
}
108+
109+
public static void addExceptionAttributes(
110+
Throwable exception, BiConsumer<AttributeKey<String>, String> attributeConsumer) {
111+
String exceptionType = exception.getClass().getCanonicalName();
112+
if (exceptionType != null) {
113+
attributeConsumer.accept(EXCEPTION_TYPE, exceptionType);
114+
}
115+
116+
String exceptionMessage = exception.getMessage();
117+
if (exceptionMessage != null) {
118+
attributeConsumer.accept(EXCEPTION_MESSAGE, exceptionMessage);
119+
}
120+
121+
StringWriter stringWriter = new StringWriter();
122+
try (PrintWriter printWriter = new PrintWriter(stringWriter)) {
123+
exception.printStackTrace(printWriter);
124+
}
125+
String stackTrace = stringWriter.toString();
126+
if (stackTrace != null) {
127+
attributeConsumer.accept(EXCEPTION_STACKTRACE, stackTrace);
128+
}
129+
}
98130
}

sdk/common/src/main/java/io/opentelemetry/sdk/internal/DefaultExceptionAttributeResolver.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

sdk/common/src/main/java/io/opentelemetry/sdk/internal/ExceptionAttributeResolver.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

sdk/logs/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ testing {
2828
dependencies {
2929
implementation(project(":sdk:testing"))
3030
implementation(project(":api:incubator"))
31+
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
3132
implementation("com.google.guava:guava")
3233
}
3334
}

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LoggerSharedState.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import io.opentelemetry.sdk.common.Clock;
99
import io.opentelemetry.sdk.common.CompletableResultCode;
10-
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1110
import io.opentelemetry.sdk.resources.Resource;
1211
import java.util.function.Supplier;
1312
import javax.annotation.Nullable;
@@ -22,20 +21,17 @@ final class LoggerSharedState {
2221
private final Supplier<LogLimits> logLimitsSupplier;
2322
private final LogRecordProcessor logRecordProcessor;
2423
private final Clock clock;
25-
private final ExceptionAttributeResolver exceptionAttributeResolver;
2624
@Nullable private volatile CompletableResultCode shutdownResult = null;
2725

2826
LoggerSharedState(
2927
Resource resource,
3028
Supplier<LogLimits> logLimitsSupplier,
3129
LogRecordProcessor logRecordProcessor,
32-
Clock clock,
33-
ExceptionAttributeResolver exceptionAttributeResolver) {
30+
Clock clock) {
3431
this.resource = resource;
3532
this.logLimitsSupplier = logLimitsSupplier;
3633
this.logRecordProcessor = logRecordProcessor;
3734
this.clock = clock;
38-
this.exceptionAttributeResolver = exceptionAttributeResolver;
3935
}
4036

4137
Resource getResource() {
@@ -54,10 +50,6 @@ Clock getClock() {
5450
return clock;
5551
}
5652

57-
ExceptionAttributeResolver getExceptionAttributeResolver() {
58-
return exceptionAttributeResolver;
59-
}
60-
6153
boolean hasBeenShutdown() {
6254
return shutdownResult != null;
6355
}

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,15 @@
55

66
package io.opentelemetry.sdk.logs;
77

8-
import static io.opentelemetry.sdk.internal.ExceptionAttributeResolver.EXCEPTION_MESSAGE;
9-
import static io.opentelemetry.sdk.internal.ExceptionAttributeResolver.EXCEPTION_STACKTRACE;
10-
import static io.opentelemetry.sdk.internal.ExceptionAttributeResolver.EXCEPTION_TYPE;
11-
128
import io.opentelemetry.api.common.AttributeKey;
139
import io.opentelemetry.api.common.Value;
1410
import io.opentelemetry.api.logs.LogRecordBuilder;
1511
import io.opentelemetry.api.logs.Severity;
1612
import io.opentelemetry.api.trace.Span;
1713
import io.opentelemetry.context.Context;
1814
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
15+
import io.opentelemetry.sdk.internal.AttributeUtil;
1916
import io.opentelemetry.sdk.internal.AttributesMap;
20-
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
2117
import java.time.Instant;
2218
import java.util.concurrent.TimeUnit;
2319
import javax.annotation.Nullable;
@@ -56,20 +52,9 @@ SdkLogRecordBuilder setException(Throwable throwable) {
5652
if (throwable == null) {
5753
return this;
5854
}
59-
ExceptionAttributeResolver exceptionAttributeResolver =
60-
loggerSharedState.getExceptionAttributeResolver();
61-
String type = exceptionAttributeResolver.getExceptionType(throwable);
62-
if (type != null) {
63-
setAttribute(EXCEPTION_TYPE, type);
64-
}
65-
String message = exceptionAttributeResolver.getExceptionMessage(throwable);
66-
if (message != null) {
67-
setAttribute(EXCEPTION_MESSAGE, message);
68-
}
69-
String stacktrace = exceptionAttributeResolver.getExceptionStacktrace(throwable);
70-
if (stacktrace != null) {
71-
setAttribute(EXCEPTION_STACKTRACE, stacktrace);
72-
}
55+
56+
AttributeUtil.addExceptionAttributes(throwable, this::setAttribute);
57+
7358
return this;
7459
}
7560

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProvider.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import io.opentelemetry.sdk.common.CompletableResultCode;
1414
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
1515
import io.opentelemetry.sdk.internal.ComponentRegistry;
16-
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1716
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1817
import io.opentelemetry.sdk.logs.internal.LoggerConfig;
1918
import io.opentelemetry.sdk.resources.Resource;
@@ -54,12 +53,10 @@ public static SdkLoggerProviderBuilder builder() {
5453
Supplier<LogLimits> logLimitsSupplier,
5554
List<LogRecordProcessor> processors,
5655
Clock clock,
57-
ScopeConfigurator<LoggerConfig> loggerConfigurator,
58-
ExceptionAttributeResolver exceptionAttributeResolver) {
56+
ScopeConfigurator<LoggerConfig> loggerConfigurator) {
5957
LogRecordProcessor logRecordProcessor = LogRecordProcessor.composite(processors);
6058
this.sharedState =
61-
new LoggerSharedState(
62-
resource, logLimitsSupplier, logRecordProcessor, clock, exceptionAttributeResolver);
59+
new LoggerSharedState(resource, logLimitsSupplier, logRecordProcessor, clock);
6360
this.loggerComponentRegistry =
6461
new ComponentRegistry<>(
6562
instrumentationScopeInfo ->

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProviderBuilder.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import io.opentelemetry.context.Context;
1313
import io.opentelemetry.sdk.common.Clock;
1414
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
15-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
16-
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1715
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1816
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
1917
import io.opentelemetry.sdk.logs.data.LogRecordData;
@@ -39,8 +37,6 @@ public final class SdkLoggerProviderBuilder {
3937
private Clock clock = Clock.getDefault();
4038
private ScopeConfiguratorBuilder<LoggerConfig> loggerConfiguratorBuilder =
4139
LoggerConfig.configuratorBuilder();
42-
private ExceptionAttributeResolver exceptionAttributeResolver =
43-
DefaultExceptionAttributeResolver.getInstance();
4440

4541
SdkLoggerProviderBuilder() {}
4642

@@ -153,33 +149,13 @@ SdkLoggerProviderBuilder addLoggerConfiguratorCondition(
153149
return this;
154150
}
155151

156-
/**
157-
* Set the exception attribute resolver, which resolves {@code exception.*} attributes an
158-
* exception is set on a log.
159-
*
160-
* <p>This method is experimental so not public. You may reflectively call it using {@link
161-
* SdkLoggerProviderUtil#setExceptionAttributeResolver(SdkLoggerProviderBuilder,
162-
* ExceptionAttributeResolver)}.
163-
*/
164-
SdkLoggerProviderBuilder setExceptionAttributeResolver(
165-
ExceptionAttributeResolver exceptionAttributeResolver) {
166-
requireNonNull(exceptionAttributeResolver, "exceptionAttributeResolver");
167-
this.exceptionAttributeResolver = exceptionAttributeResolver;
168-
return this;
169-
}
170-
171152
/**
172153
* Create a {@link SdkLoggerProvider} instance.
173154
*
174155
* @return an instance configured with the provided options
175156
*/
176157
public SdkLoggerProvider build() {
177158
return new SdkLoggerProvider(
178-
resource,
179-
logLimitsSupplier,
180-
logRecordProcessors,
181-
clock,
182-
loggerConfiguratorBuilder.build(),
183-
exceptionAttributeResolver);
159+
resource, logLimitsSupplier, logRecordProcessors, clock, loggerConfiguratorBuilder.build());
184160
}
185161
}

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/internal/SdkLoggerProviderUtil.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.opentelemetry.sdk.logs.internal;
77

88
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
9-
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
109
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1110
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
1211
import java.lang.reflect.InvocationTargetException;
@@ -56,20 +55,4 @@ public static void addLoggerConfiguratorCondition(
5655
"Error calling addLoggerConfiguratorCondition on SdkLoggerProviderBuilder", e);
5756
}
5857
}
59-
60-
/** Reflectively set exception attribute resolver to the {@link SdkLoggerProviderBuilder}. */
61-
public static void setExceptionAttributeResolver(
62-
SdkLoggerProviderBuilder sdkLoggerProviderBuilder,
63-
ExceptionAttributeResolver exceptionAttributeResolver) {
64-
try {
65-
Method method =
66-
SdkLoggerProviderBuilder.class.getDeclaredMethod(
67-
"setExceptionAttributeResolver", ExceptionAttributeResolver.class);
68-
method.setAccessible(true);
69-
method.invoke(sdkLoggerProviderBuilder, exceptionAttributeResolver);
70-
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
71-
throw new IllegalStateException(
72-
"Error calling setExceptionAttributeResolver on SdkLoggerProviderBuilder", e);
73-
}
74-
}
7558
}

sdk/logs/src/test/java/io/opentelemetry/sdk/logs/LoggerSharedStateTest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
import io.opentelemetry.sdk.common.Clock;
1414
import io.opentelemetry.sdk.common.CompletableResultCode;
15-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
1615
import io.opentelemetry.sdk.resources.Resource;
1716
import org.junit.jupiter.api.Test;
1817

@@ -25,11 +24,7 @@ void shutdown() {
2524
when(logRecordProcessor.shutdown()).thenReturn(code);
2625
LoggerSharedState state =
2726
new LoggerSharedState(
28-
Resource.empty(),
29-
LogLimits::getDefault,
30-
logRecordProcessor,
31-
Clock.getDefault(),
32-
DefaultExceptionAttributeResolver.getInstance());
27+
Resource.empty(), LogLimits::getDefault, logRecordProcessor, Clock.getDefault());
3328
state.shutdown();
3429
state.shutdown();
3530
verify(logRecordProcessor, times(1)).shutdown();

0 commit comments

Comments
 (0)