Skip to content

Commit 5128259

Browse files
committed
Improve error handling observability
- Add debug log to FlagEvalMetrics.record() catch block so metric recording failures are visible in debug logs - Widen Provider catch from NoClassDefFoundError to LinkageError to cover IncompatibleClassChangeError and other classloader issues from incompatible OTel SDK versions - Add slf4j logger to Provider and log at error level when the fallback catch fires
1 parent 95c6fb9 commit 5128259

2 files changed

Lines changed: 6 additions & 3 deletions

File tree

products/feature-flagging/feature-flagging-api/src/main/java/datadog/trace/api/openfeature/FlagEvalMetrics.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ void record(
133133

134134
c.add(1, builder.build());
135135
} catch (Exception e) {
136-
// Never let metrics recording break flag evaluation
136+
log.debug("Failed to record flag evaluation metric for {}", flagKey, e);
137137
}
138138
}
139139

products/feature-flagging/feature-flagging-api/src/main/java/datadog/trace/api/openfeature/Provider.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
import java.util.List;
2020
import java.util.concurrent.TimeUnit;
2121
import java.util.concurrent.atomic.AtomicBoolean;
22+
import org.slf4j.Logger;
23+
import org.slf4j.LoggerFactory;
2224

2325
public class Provider extends EventProvider implements Metadata {
2426

27+
private static final Logger log = LoggerFactory.getLogger(Provider.class);
2528
static final String METADATA = "datadog-openfeature-provider";
2629
private static final String EVALUATOR_IMPL = "datadog.trace.api.openfeature.DDEvaluator";
2730
private static final Options DEFAULT_OPTIONS = new Options().initTimeout(30, SECONDS);
@@ -48,8 +51,8 @@ public Provider(final Options options) {
4851
try {
4952
metrics = new FlagEvalMetrics();
5053
hook = new FlagEvalHook(metrics);
51-
} catch (NoClassDefFoundError | Exception e) {
52-
// Fallback: FlagEvalMetrics constructor threw unexpectedly — degrade to no-op
54+
} catch (LinkageError | Exception e) {
55+
log.error("Failed to initialize evaluation metrics — metrics disabled", e);
5356
}
5457
}
5558
this.flagEvalMetrics = metrics;

0 commit comments

Comments
 (0)