Skip to content

Commit a0ded5e

Browse files
committed
Improve API ergonomics
1 parent 7408c08 commit a0ded5e

File tree

8 files changed

+47
-33
lines changed

8 files changed

+47
-33
lines changed

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,30 @@
55

66
package io.opentelemetry.sdk.internal;
77

8-
import io.opentelemetry.api.internal.ConfigUtil;
98
import java.io.PrintWriter;
109
import java.io.StringWriter;
1110

1211
/**
13-
* This class is internal and experimental. Its APIs are unstable and can change at any time. Its
12+
* The default {@link ExceptionAttributeResolver}, populating standard {@code exception.*} as
13+
* defined by the semantic conventions.
14+
*
15+
* <p>This class is internal and experimental. Its APIs are unstable and can change at any time. Its
1416
* APIs (or a version of them) may be promoted to the public stable API in the future, but no
1517
* guarantees are made.
18+
*
19+
* @see ExceptionAttributeResolver#getDefault()
20+
* @see ExceptionAttributeResolver#getDefault(boolean) ()
1621
*/
17-
public final class DefaultExceptionAttributeResolver implements ExceptionAttributeResolver {
22+
final class DefaultExceptionAttributeResolver implements ExceptionAttributeResolver {
1823

19-
private static final String ENABLE_JVM_STACKTRACE_PROPERTY =
20-
"otel.experimental.sdk.jvm_stacktrace";
21-
22-
private static final DefaultExceptionAttributeResolver INSTANCE =
23-
new DefaultExceptionAttributeResolver(
24-
Boolean.parseBoolean(ConfigUtil.getString(ENABLE_JVM_STACKTRACE_PROPERTY, "false")));
24+
static final String ENABLE_JVM_STACKTRACE_PROPERTY = "otel.experimental.sdk.jvm_stacktrace";
2525

2626
private final boolean jvmStacktraceEnabled;
2727

28-
// Visible for testing
2928
DefaultExceptionAttributeResolver(boolean jvmStacktraceEnabled) {
3029
this.jvmStacktraceEnabled = jvmStacktraceEnabled;
3130
}
3231

33-
public static ExceptionAttributeResolver getInstance() {
34-
return INSTANCE;
35-
}
36-
3732
@Override
3833
public void setExceptionAttributes(
3934
AttributeSetter attributeSetter, Throwable throwable, int maxAttributeLength) {

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66
package io.opentelemetry.sdk.internal;
77

8+
import static io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver.ENABLE_JVM_STACKTRACE_PROPERTY;
9+
810
import io.opentelemetry.api.common.AttributeKey;
11+
import io.opentelemetry.api.internal.ConfigUtil;
912
import javax.annotation.Nullable;
1013

1114
/**
@@ -24,6 +27,26 @@ public interface ExceptionAttributeResolver {
2427
void setExceptionAttributes(
2528
AttributeSetter attributeSetter, Throwable throwable, int maxAttributeLength);
2629

30+
/**
31+
* Return the default exception attribute resolver, setting {@code jvmStacktraceEnabled} based on
32+
* {@link DefaultExceptionAttributeResolver#ENABLE_JVM_STACKTRACE_PROPERTY}.
33+
*/
34+
static ExceptionAttributeResolver getDefault() {
35+
return getDefault(
36+
Boolean.parseBoolean(ConfigUtil.getString(ENABLE_JVM_STACKTRACE_PROPERTY, "false")));
37+
}
38+
39+
/**
40+
* Return the default exception attribute resolver.
41+
*
42+
* @param jvmStacktraceEnabled if true, resolve stacktrace using the stacktrace renderer built
43+
* into the JVM. This built in JVM renderer is not attribute limits aware, and may utilize
44+
* more CPU / memory than is needed. Most users will prefer to set this to {@code false}.
45+
*/
46+
static ExceptionAttributeResolver getDefault(boolean jvmStacktraceEnabled) {
47+
return new DefaultExceptionAttributeResolver(jvmStacktraceEnabled);
48+
}
49+
2750
/**
2851
* This class is internal and experimental. Its APIs are unstable and can change at any time. Its
2952
* APIs (or a version of them) may be promoted to the public stable API in the future, but no

sdk/common/src/test/java/io/opentelemetry/sdk/internal/DefaultExceptionAttributeResolverTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ void setExceptionAttributes(
2828
String expectedMessage,
2929
String expectedType,
3030
Predicate<String> validStacktrace) {
31-
DefaultExceptionAttributeResolver resolver =
32-
new DefaultExceptionAttributeResolver(jvmStacktraceEnabled);
31+
ExceptionAttributeResolver resolver =
32+
ExceptionAttributeResolver.getDefault(jvmStacktraceEnabled);
3333
Map<String, Object> attributes = new HashMap<>();
3434

3535
resolver.setExceptionAttributes(

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +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;
1615
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1716
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1817
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
@@ -40,7 +39,7 @@ public final class SdkLoggerProviderBuilder {
4039
private ScopeConfiguratorBuilder<LoggerConfig> loggerConfiguratorBuilder =
4140
LoggerConfig.configuratorBuilder();
4241
private ExceptionAttributeResolver exceptionAttributeResolver =
43-
DefaultExceptionAttributeResolver.getInstance();
42+
ExceptionAttributeResolver.getDefault();
4443

4544
SdkLoggerProviderBuilder() {}
4645

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import io.opentelemetry.sdk.common.Clock;
1414
import io.opentelemetry.sdk.common.CompletableResultCode;
15-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
15+
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1616
import io.opentelemetry.sdk.resources.Resource;
1717
import org.junit.jupiter.api.Test;
1818

@@ -29,7 +29,7 @@ void shutdown() {
2929
LogLimits::getDefault,
3030
logRecordProcessor,
3131
Clock.getDefault(),
32-
DefaultExceptionAttributeResolver.getInstance());
32+
ExceptionAttributeResolver.getDefault());
3333
state.shutdown();
3434
state.shutdown();
3535
verify(logRecordProcessor, times(1)).shutdown();

sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracerProviderBuilder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.opentelemetry.api.trace.Span;
1111
import io.opentelemetry.sdk.common.Clock;
1212
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
13-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
1413
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
1514
import io.opentelemetry.sdk.internal.ScopeConfigurator;
1615
import io.opentelemetry.sdk.internal.ScopeConfiguratorBuilder;
@@ -38,7 +37,7 @@ public final class SdkTracerProviderBuilder {
3837
private ScopeConfiguratorBuilder<TracerConfig> tracerConfiguratorBuilder =
3938
TracerConfig.configuratorBuilder();
4039
private ExceptionAttributeResolver exceptionAttributeResolver =
41-
DefaultExceptionAttributeResolver.getInstance();
40+
ExceptionAttributeResolver.getDefault();
4241

4342
/**
4443
* Assign a {@link Clock}. {@link Clock} will be used each time a {@link Span} is started, ended

sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkSpanTest.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import io.opentelemetry.context.Context;
3939
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
4040
import io.opentelemetry.sdk.internal.AttributesMap;
41-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
4241
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
4342
import io.opentelemetry.sdk.internal.InstrumentationScopeUtil;
4443
import io.opentelemetry.sdk.resources.Resource;
@@ -946,7 +945,7 @@ void addLink() {
946945
parentSpanId,
947946
null,
948947
null,
949-
DefaultExceptionAttributeResolver.getInstance());
948+
ExceptionAttributeResolver.getDefault());
950949
try {
951950
Span span1 = createTestSpan(SpanKind.INTERNAL);
952951
Span span2 = createTestSpan(SpanKind.INTERNAL);
@@ -1036,7 +1035,7 @@ void addLink_FaultIn() {
10361035
Context.root(),
10371036
SpanLimits.getDefault(),
10381037
spanProcessor,
1039-
DefaultExceptionAttributeResolver.getInstance(),
1038+
ExceptionAttributeResolver.getDefault(),
10401039
testClock,
10411040
resource,
10421041
null,
@@ -1381,7 +1380,7 @@ void onStartOnEndNotRequired() {
13811380
Context.root(),
13821381
spanLimits,
13831382
spanProcessor,
1384-
DefaultExceptionAttributeResolver.getInstance(),
1383+
ExceptionAttributeResolver.getDefault(),
13851384
testClock,
13861385
resource,
13871386
AttributesMap.create(
@@ -1464,7 +1463,7 @@ private SdkSpan createTestSpanWithAttributes(Map<AttributeKey, Object> attribute
14641463
null,
14651464
attributesMap,
14661465
Collections.singletonList(link),
1467-
DefaultExceptionAttributeResolver.getInstance());
1466+
ExceptionAttributeResolver.getDefault());
14681467
}
14691468

14701469
private SdkSpan createTestRootSpan() {
@@ -1474,7 +1473,7 @@ private SdkSpan createTestRootSpan() {
14741473
SpanId.getInvalid(),
14751474
null,
14761475
Collections.singletonList(link),
1477-
DefaultExceptionAttributeResolver.getInstance());
1476+
ExceptionAttributeResolver.getDefault());
14781477
}
14791478

14801479
private SdkSpan createTestSpan(SpanKind kind) {
@@ -1484,7 +1483,7 @@ private SdkSpan createTestSpan(SpanKind kind) {
14841483
parentSpanId,
14851484
null,
14861485
Collections.singletonList(link),
1487-
DefaultExceptionAttributeResolver.getInstance());
1486+
ExceptionAttributeResolver.getDefault());
14881487
}
14891488

14901489
private SdkSpan createTestSpan(SpanLimits config) {
@@ -1494,7 +1493,7 @@ private SdkSpan createTestSpan(SpanLimits config) {
14941493
parentSpanId,
14951494
null,
14961495
Collections.singletonList(link),
1497-
DefaultExceptionAttributeResolver.getInstance());
1496+
ExceptionAttributeResolver.getDefault());
14981497
}
14991498

15001499
private SdkSpan createTestSpan(
@@ -1608,7 +1607,7 @@ void testAsSpanData() {
16081607
Context.root(),
16091608
spanLimits,
16101609
spanProcessor,
1611-
DefaultExceptionAttributeResolver.getInstance(),
1610+
ExceptionAttributeResolver.getDefault(),
16121611
clock,
16131612
resource,
16141613
attributesWithCapacity,

sdk/trace/src/test/java/io/opentelemetry/sdk/trace/SdkTracerProviderTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.opentelemetry.sdk.common.Clock;
2323
import io.opentelemetry.sdk.common.CompletableResultCode;
2424
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
25-
import io.opentelemetry.sdk.internal.DefaultExceptionAttributeResolver;
2625
import io.opentelemetry.sdk.internal.ExceptionAttributeResolver;
2726
import io.opentelemetry.sdk.internal.ScopeConfigurator;
2827
import io.opentelemetry.sdk.resources.Resource;
@@ -298,7 +297,7 @@ void exceptionAttributeResolver() {
298297
.setSpanLimits(
299298
SpanLimits.builder().setMaxAttributeValueLength(maxAttributeLength).build());
300299
ExceptionAttributeResolver exceptionAttributeResolver =
301-
spy(DefaultExceptionAttributeResolver.getInstance());
300+
spy(ExceptionAttributeResolver.getDefault());
302301
SdkTracerProviderUtil.setExceptionAttributeResolver(builder, exceptionAttributeResolver);
303302

304303
Exception exception = new Exception("error");

0 commit comments

Comments
 (0)