public void EventSourceSetup_HigherSeverity() { // get default sink using reflection var defaultLogger = OtelLogging.GetLogger(); var sinkField = defaultLogger.GetType().GetField("_sink", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var defaultSink = (ISink)sinkField.GetValue(defaultLogger); try { var testSink = new TestSink(); var listener = new SdkSelfDiagnosticsEventListener(EventLevel.Verbose); // override default logger's sink with test sink sinkField.SetValue(defaultLogger, testSink); // Emitting a Verbose event. Or any EventSource event with lower severity than Error. AspNetTelemetryEventSource.Log.ActivityRestored("123"); OpenTelemetrySdkEventSource.Log.ActivityStarted("Activity started", "1"); testSink.Messages.Should().Contain(msg => msg.Contains("EventSource=OpenTelemetry-Instrumentation-AspNet-Telemetry, Message=Activity restored, Id='123'")); testSink.Messages.Should().Contain(msg => msg.Contains("EventSource=OpenTelemetry-Sdk, Message=Activity started.")); } finally { // restore default sink sinkField.SetValue(defaultLogger, defaultSink); } }
public void EventSourceSetup_LowerSeverity() { // get default sink using reflection var defaultLogger = OtelLogging.GetLogger(); var sinkField = defaultLogger.GetType().GetField("_sink", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var defaultSink = (ISink)sinkField.GetValue(defaultLogger); try { var testSink = new TestSink(); var listener = new SdkSelfDiagnosticsEventListener(EventLevel.Error); // override default logger's sink with test sink sinkField.SetValue(defaultLogger, testSink); // Emitting a Verbose event. Or any EventSource event with lower severity than Error. AspNetTelemetryEventSource.Log.ActivityRestored("123"); OpenTelemetrySdkEventSource.Log.ActivityStarted("Activity started", "1"); testSink.Messages.Should().BeEmpty("events with lower severity than error should not be written."); } finally { // restore default sink sinkField.SetValue(defaultLogger, defaultSink); } }
/// <summary> /// Initialize the OpenTelemetry SDK with a pre-defined set of exporters, shims, and /// instrumentations. /// </summary> public static void Initialize() { if (Interlocked.Exchange(ref _firstInitialization, value: 0) != 1) { // Initialize() was already called before return; } try { if (TracerSettings.LoadTracerAtStartup || MeterSettings.LoadMetricsAtStartup) { // Initialize SdkSelfDiagnosticsEventListener to create an EventListener for the OpenTelemetry SDK _sdkEventListener = new(EventLevel.Warning); // Register to shutdown events AppDomain.CurrentDomain.ProcessExit += OnExit; AppDomain.CurrentDomain.DomainUnload += OnExit; if (TracerSettings.FlushOnUnhandledException || MeterSettings.FlushOnUnhandledException) { AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; } } if (TracerSettings.LoadTracerAtStartup) { var builder = Sdk .CreateTracerProviderBuilder() .SetResourceBuilder(_resourceBuilder) .UseEnvironmentVariables(TracerSettings) .SetSampler(new AlwaysOnSampler()) .InvokePlugins(TracerSettings.TracerPlugins); _tracerProvider = builder.Build(); Logger.Information("OpenTelemetry tracer initialized."); } if (MeterSettings.LoadMetricsAtStartup) { var builder = Sdk .CreateMeterProviderBuilder() .SetResourceBuilder(_resourceBuilder) .UseEnvironmentVariables(MeterSettings) .InvokePlugins(MeterSettings.MetricPlugins); _meterProvider = builder.Build(); Logger.Information("OpenTelemetry meter initialized."); } } catch (Exception ex) { Logger.Error(ex, "OpenTelemetry SDK load exception."); throw; } try { if (_tracerProvider is not null) { // Instantiate the OpenTracing shim. The underlying OpenTelemetry tracer will create // spans using the "OpenTelemetry.AutoInstrumentation.OpenTracingShim" source. var openTracingShim = new TracerShim( _tracerProvider.GetTracer("OpenTelemetry.AutoInstrumentation.OpenTracingShim"), Propagators.DefaultTextMapPropagator); // This registration must occur prior to any reference to the OpenTracing tracer: // otherwise the no-op tracer is going to be used by OpenTracing instead. GlobalTracer.RegisterIfAbsent(openTracingShim); Logger.Information("OpenTracingShim loaded."); } else { Logger.Information("OpenTracingShim was not loaded as the provider is not initialized."); } } catch (Exception ex) { Logger.Error(ex, "OpenTracingShim exception."); throw; } }