// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 #nullable disable using System.Diagnostics; using OpenTelemetry.Internal; namespace OpenTelemetry.Instrumentation; internal sealed class DiagnosticSourceListener : IObserver<KeyValuePair<string, object>> { private readonly ListenerHandler handler; private readonly Action<string, string, Exception> logUnknownException; public DiagnosticSourceListener(ListenerHandler handler, Action<string, string, Exception> logUnknownException) { Guard.ThrowIfNull(handler); this.handler = handler; this.logUnknownException = logUnknownException; } public void OnCompleted() { } public void OnError(Exception error) { } public void OnNext(KeyValuePair<string, object> value) { if (!this.handler.SupportsNullActivity && Activity.Current == null) { return; } try { this.handler.OnEventWritten(value.Key, value.Value); } catch (Exception ex) { this.logUnknownException?.Invoke(this.handler?.SourceName, value.Key, ex); } } } |