diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartActiveImplementationIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartActiveImplementationIntegration.cs index 3fb01e2f8119..0ee208d45699 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartActiveImplementationIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartActiveImplementationIntegration.cs @@ -40,9 +40,7 @@ internal static CallTargetState OnMethodBegin(TTarget ins if (instance.AutomaticTracer is not Datadog.Trace.Tracer tracer) { - Log.Error( - "Error: instance.AutomaticTracer is not a Datadog.Trace.Tracer: {TracerType}. This should never happen, and indicates a problem with automatic instrumentation.", - instance.AutomaticTracer?.GetType()); + LogInvalidAutomaticTracer(instance.AutomaticTracer); return CallTargetState.GetDefault(); } @@ -65,4 +63,27 @@ internal static CallTargetReturn OnMethodEnd(TTarget : returnValue; return new CallTargetReturn(duckScope); } + + internal static void LogInvalidAutomaticTracer(object? autoTracer) + { + try + { + // Throwing and catching to grab to call stack and redact it for telemetry + throw new Exception("instance.AutomaticTracer was not a Datadog.Trace.Tracer"); + } + catch (Exception ex) + { + if (autoTracer is null) + { + Log.Error(ex, "Error: instance.AutomaticTracer is null. This should never happen, and indicates a problem with automatic instrumentation."); + } + else + { + Log.Error( + ex, + "Error: instance.AutomaticTracer is not a Datadog.Trace.Tracer: {TracerType}. This should never happen, and indicates a problem with automatic instrumentation.", + autoTracer.GetType()); + } + } + } } diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartSpanIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartSpanIntegration.cs index 00e5750db938..1609e0215aa5 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartSpanIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/StartSpanIntegration.cs @@ -37,9 +37,7 @@ internal static CallTargetState OnMethodBegin(TTarget ins // This is only used by the OpenTracing public API if (instance.AutomaticTracer is not Datadog.Trace.Tracer tracer) { - Log.Error( - "Error: instance.AutomaticTracer is not a Datadog.Trace.Tracer: {TracerType}. This should never happen, and indicates a problem with automatic instrumentation.", - instance.AutomaticTracer?.GetType()); + StartActiveImplementationIntegration.LogInvalidAutomaticTracer(instance.AutomaticTracer); return CallTargetState.GetDefault(); }