| File: Tracing\Configuration\TracingBuilderConfigurationExtensions.cs | Web Access |
| Project: src\runtime\src\libraries\Microsoft.Extensions.Diagnostics\src\Microsoft.Extensions.Diagnostics.csproj (Microsoft.Extensions.Diagnostics) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Microsoft.Extensions.Diagnostics.Tracing { /// <summary> /// Extensions for <see cref="ITracingBuilder"/> for enabling tracing based on <see cref="IConfiguration"/>. /// </summary> public static class TracingBuilderConfigurationExtensions { /// <summary> /// Reads tracing configuration from the provided <see cref="IConfiguration"/> section and configures /// which <see cref="ActivitySource"/> and <see cref="Activity"/> instances are enabled. /// </summary> /// <remarks> /// <para>Tracing has two key levels: <see cref="ActivitySource.Name"/> and <see cref="Activity.OperationName"/>.</para> /// <list type="bullet"> /// <item><description>Section names: <c>EnabledTracing</c> (both global and local), <c>EnabledGlobalTracing</c>, and <c>EnabledLocalTracing</c>, plus the listener-specific forms <c>{ListenerName}:...</c>.</description></item> /// <item><description>Within each section, supported entries are <c>Default</c>, <c>{SourceName}</c>, <c>{SourceName}:Default</c>, and <c>{SourceName}:{OperationName}</c>. <c>Default</c> at either level is a synonym for the level above (a source-level rule when nested under a source, a global rule at the top).</description></item> /// <item><description>Listener-specific rules are evaluated together with root-level rules. When both match, the most specific rule is chosen; listener-specific rules are more specific than root-level defaults.</description></item> /// <item><description>Values are Boolean only: <c>true</c> enables and <c>false</c> disables.</description></item> /// </list> /// <para>Example keys: <c>EnabledTracing:Default=true</c>, <c>EnabledGlobalTracing:MyCompany.Service=false</c>, <c>EnabledTracing:MyCompany.Service:Checkout=true</c>, and <c>MyListener:EnabledLocalTracing:MyCompany.Service=true</c>.</para> /// </remarks> /// <param name="builder">The <see cref="ITracingBuilder"/>.</param> /// <param name="configuration">The <see cref="IConfiguration"/> section to load.</param> /// <returns>The original <see cref="ITracingBuilder"/> for chaining.</returns> public static ITracingBuilder AddConfiguration(this ITracingBuilder builder, IConfiguration configuration) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(configuration); builder.Services.AddSingleton<IConfigureOptions<TracingOptions>>(new TracingConfigureOptions(configuration)); builder.Services.AddSingleton<IOptionsChangeTokenSource<TracingOptions>>(new ConfigurationChangeTokenSource<TracingOptions>(configuration)); builder.Services.AddSingleton(new TracingConfiguration(configuration)); return builder; } } }