From 01f2b5b680fdeb0e37ae9b603f54a44844a465fb Mon Sep 17 00:00:00 2001 From: evgenyfedorov2 Date: Mon, 23 Jun 2025 11:30:38 +0200 Subject: [PATCH 1/2] Initial commit --- ...IncomingRequestLoggingBuilderExtensions.cs | 3 - .../PerRequestLogBufferingOptions.cs | 3 - ...t.AspNetCore.Diagnostics.Middleware.csproj | 1 - ...oft.AspNetCore.Diagnostics.Middleware.json | 52 +++++- .../Buffering/LogBuffer.cs | 4 - ...oft.Extensions.Telemetry.Abstractions.json | 58 ++++++- .../Sampling/LoggingSampler.cs | 3 - .../GlobalBufferLoggingBuilderExtensions.cs | 3 - .../Buffering/GlobalLogBufferingOptions.cs | 3 - .../Buffering/LogBufferingFilterRule.cs | 3 - .../Microsoft.Extensions.Telemetry.json | 158 +++++++++++++++++- .../RandomProbabilisticSamplerFilterRule.cs | 3 - .../RandomProbabilisticSamplerOptions.cs | 3 - .../SamplingLoggerBuilderExtensions.cs | 2 - 14 files changed, 265 insertions(+), 34 deletions(-) diff --git a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerIncomingRequestLoggingBuilderExtensions.cs b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerIncomingRequestLoggingBuilderExtensions.cs index 41664d466ce..840fc80c6cd 100644 --- a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerIncomingRequestLoggingBuilderExtensions.cs +++ b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerIncomingRequestLoggingBuilderExtensions.cs @@ -3,7 +3,6 @@ #if NET9_0_OR_GREATER using System; -using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Diagnostics.Buffering; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; @@ -11,7 +10,6 @@ using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Diagnostics.Buffering; using Microsoft.Extensions.Options; -using Microsoft.Shared.DiagnosticIds; using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Logging; @@ -19,7 +17,6 @@ namespace Microsoft.Extensions.Logging; /// /// Lets you register per incoming request log buffering in a dependency injection container. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public static class PerIncomingRequestLoggingBuilderExtensions { /// diff --git a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerRequestLogBufferingOptions.cs b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerRequestLogBufferingOptions.cs index 0b281f06edb..f675466ebe5 100644 --- a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerRequestLogBufferingOptions.cs +++ b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Buffering/PerRequestLogBufferingOptions.cs @@ -5,17 +5,14 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Diagnostics.Buffering; using Microsoft.Shared.Data.Validation; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.AspNetCore.Diagnostics.Buffering; /// /// The options for log buffering per each incoming request. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public class PerRequestLogBufferingOptions { private const int DefaultPerRequestBufferSizeInBytes = 500 * 1024 * 1024; // 500 MB. diff --git a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj index 11f769c026a..dd8d0e40847 100644 --- a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj +++ b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj @@ -10,7 +10,6 @@ $(NetCoreTargetFrameworks) true true - true true false false diff --git a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.json b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.json index e76e745c5f1..f445bb581f5 100644 --- a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.json +++ b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.json @@ -1,5 +1,5 @@ { - "Name": "Microsoft.AspNetCore.Diagnostics.Middleware, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "Name": "Microsoft.AspNetCore.Diagnostics.Middleware, Version=9.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "Types": [ { "Type": "static class Microsoft.Extensions.DependencyInjection.HttpLoggingServiceCollectionExtensions", @@ -122,6 +122,10 @@ "Member": "System.Collections.Generic.ISet Microsoft.AspNetCore.Diagnostics.Logging.LoggingRedactionOptions.ExcludePathStartsWith { get; set; }", "Stage": "Experimental" }, + { + "Member": "bool Microsoft.AspNetCore.Diagnostics.Logging.LoggingRedactionOptions.IncludeUnmatchedRoutes { get; set; }", + "Stage": "Experimental" + }, { "Member": "System.Collections.Generic.IDictionary Microsoft.AspNetCore.Diagnostics.Logging.LoggingRedactionOptions.RequestHeadersDataClasses { get; set; }", "Stage": "Experimental" @@ -144,6 +148,52 @@ } ] }, + { + "Type": "static class Microsoft.Extensions.Logging.PerIncomingRequestLoggingBuilderExtensions", + "Stage": "Stable", + "Methods": [ + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.PerIncomingRequestLoggingBuilderExtensions.AddPerIncomingRequestBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Configuration.IConfiguration configuration);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.PerIncomingRequestLoggingBuilderExtensions.AddPerIncomingRequestBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.PerIncomingRequestLoggingBuilderExtensions.AddPerIncomingRequestBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Logging.LogLevel? logLevel = null);", + "Stage": "Stable" + } + ] + }, + { + "Type": "class Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions.PerRequestLogBufferingOptions();", + "Stage": "Stable" + } + ], + "Properties": [ + { + "Member": "System.TimeSpan Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions.AutoFlushDuration { get; set; }", + "Stage": "Stable" + }, + { + "Member": "int Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions.MaxLogRecordSizeInBytes { get; set; }", + "Stage": "Stable" + }, + { + "Member": "int Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions.MaxPerRequestBufferSizeInBytes { get; set; }", + "Stage": "Stable" + }, + { + "Member": "System.Collections.Generic.IList Microsoft.AspNetCore.Diagnostics.Buffering.PerRequestLogBufferingOptions.Rules { get; set; }", + "Stage": "Stable" + } + ] + }, { "Type": "static class Microsoft.AspNetCore.Diagnostics.Latency.RequestCheckpointConstants", "Stage": "Stable", diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Buffering/LogBuffer.cs b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Buffering/LogBuffer.cs index 4853615c228..4259c90f645 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Buffering/LogBuffer.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Buffering/LogBuffer.cs @@ -1,17 +1,13 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #if NET9_0_OR_GREATER - -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Diagnostics.Buffering; /// /// Buffers logs into circular buffers and drops them after some time if not flushed. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] #pragma warning disable S1694 // An abstract class should have both abstract and concrete methods public abstract class LogBuffer #pragma warning restore S1694 // An abstract class should have both abstract and concrete methods diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.json b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.json index 8f52b86fcd1..1ddd511257a 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.json +++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.json @@ -1,5 +1,5 @@ { - "Name": "Microsoft.Extensions.Telemetry.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "Name": "Microsoft.Extensions.Telemetry.Abstractions, Version=9.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "Types": [ { "Type": "readonly struct Microsoft.Extensions.Diagnostics.Latency.Checkpoint : System.IEquatable", @@ -179,6 +179,16 @@ } ] }, + { + "Type": "abstract class Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBuffer : Microsoft.Extensions.Diagnostics.Buffering.LogBuffer", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBuffer.GlobalLogBuffer();", + "Stage": "Stable" + } + ] + }, { "Type": "sealed class Microsoft.Extensions.Diagnostics.Metrics.HistogramAttribute : System.Attribute", "Stage": "Stable", @@ -488,6 +498,24 @@ } ] }, + { + "Type": "abstract class Microsoft.Extensions.Diagnostics.Buffering.LogBuffer", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Buffering.LogBuffer.LogBuffer();", + "Stage": "Stable" + }, + { + "Member": "abstract void Microsoft.Extensions.Diagnostics.Buffering.LogBuffer.Flush();", + "Stage": "Stable" + }, + { + "Member": "abstract bool Microsoft.Extensions.Diagnostics.Buffering.LogBuffer.TryEnqueue(Microsoft.Extensions.Logging.Abstractions.IBufferedLogger bufferedLogger, in Microsoft.Extensions.Logging.Abstractions.LogEntry logEntry);", + "Stage": "Stable" + } + ] + }, { "Type": "static class Microsoft.Extensions.Logging.LoggerMessageHelper", "Stage": "Stable", @@ -600,6 +628,20 @@ } ] }, + { + "Type": "abstract class Microsoft.Extensions.Logging.LoggingSampler", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Logging.LoggingSampler.LoggingSampler();", + "Stage": "Stable" + }, + { + "Member": "abstract bool Microsoft.Extensions.Logging.LoggingSampler.ShouldSample(in Microsoft.Extensions.Logging.Abstractions.LogEntry logEntry);", + "Stage": "Stable" + } + ] + }, { "Type": "sealed class Microsoft.Extensions.Logging.LogPropertiesAttribute : System.Attribute", "Stage": "Stable", @@ -617,6 +659,10 @@ { "Member": "bool Microsoft.Extensions.Logging.LogPropertiesAttribute.SkipNullProperties { get; set; }", "Stage": "Stable" + }, + { + "Member": "bool Microsoft.Extensions.Logging.LogPropertiesAttribute.Transitive { get; set; }", + "Stage": "Experimental" } ] }, @@ -708,6 +754,16 @@ } ] }, + { + "Type": "abstract class Microsoft.Extensions.Diagnostics.Buffering.PerRequestLogBuffer : Microsoft.Extensions.Diagnostics.Buffering.LogBuffer", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Buffering.PerRequestLogBuffer.PerRequestLogBuffer();", + "Stage": "Stable" + } + ] + }, { "Type": "class Microsoft.Extensions.Http.Diagnostics.RequestMetadata", "Stage": "Stable", diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Sampling/LoggingSampler.cs b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Sampling/LoggingSampler.cs index 3dcd0b4cd12..3e227f9c17d 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Sampling/LoggingSampler.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Sampling/LoggingSampler.cs @@ -1,9 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Logging; @@ -11,7 +9,6 @@ namespace Microsoft.Extensions.Logging; /// Controls the number of samples of log records collected and sent to the backend. /// #pragma warning disable S1694 // An abstract class should have both abstract and concrete methods -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public abstract class LoggingSampler #pragma warning restore S1694 // An abstract class should have both abstract and concrete methods { diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalBufferLoggingBuilderExtensions.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalBufferLoggingBuilderExtensions.cs index 150f82b7414..d97d8fa5f0a 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalBufferLoggingBuilderExtensions.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalBufferLoggingBuilderExtensions.cs @@ -3,13 +3,11 @@ #if NET9_0_OR_GREATER using System; -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Diagnostics.Buffering; using Microsoft.Extensions.Options; -using Microsoft.Shared.DiagnosticIds; using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Logging; @@ -17,7 +15,6 @@ namespace Microsoft.Extensions.Logging; /// /// Lets you register log buffering in a dependency injection container. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public static class GlobalBufferLoggingBuilderExtensions { /// diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalLogBufferingOptions.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalLogBufferingOptions.cs index 060d823b35d..b12f9ae33cf 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalLogBufferingOptions.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/GlobalLogBufferingOptions.cs @@ -5,16 +5,13 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; using Microsoft.Shared.Data.Validation; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Diagnostics.Buffering; /// /// The options for global log buffering. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public class GlobalLogBufferingOptions { private const int DefaultMaxBufferSizeInBytes = 500 * 1024 * 1024; // 500 MB. diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/LogBufferingFilterRule.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/LogBufferingFilterRule.cs index 6aa0a0109fa..b6725141bfe 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/LogBufferingFilterRule.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Buffering/LogBufferingFilterRule.cs @@ -3,9 +3,7 @@ #if NET9_0_OR_GREATER using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Logging; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Diagnostics.Buffering; @@ -17,7 +15,6 @@ namespace Microsoft.Extensions.Diagnostics.Buffering; /// If a log entry does not match any rule, it will be emitted normally. /// If the buffer size limit is reached, the oldest buffered log entries will be dropped (not emitted!) to make room for new ones. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public class LogBufferingFilterRule { /// diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.json b/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.json index 89b08ce9676..a9e74aa0c2b 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.json +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.json @@ -1,5 +1,5 @@ { - "Name": "Microsoft.Extensions.Telemetry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "Name": "Microsoft.Extensions.Telemetry, Version=9.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "Types": [ { "Type": "static class Microsoft.Extensions.DependencyInjection.ApplicationEnricherServiceCollectionExtensions", @@ -79,6 +79,52 @@ } ] }, + { + "Type": "static class Microsoft.Extensions.Logging.GlobalBufferLoggingBuilderExtensions", + "Stage": "Stable", + "Methods": [ + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.GlobalBufferLoggingBuilderExtensions.AddGlobalBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Configuration.IConfiguration configuration);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.GlobalBufferLoggingBuilderExtensions.AddGlobalBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.GlobalBufferLoggingBuilderExtensions.AddGlobalBuffer(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Logging.LogLevel? logLevel = null);", + "Stage": "Stable" + } + ] + }, + { + "Type": "class Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions.GlobalLogBufferingOptions();", + "Stage": "Stable" + } + ], + "Properties": [ + { + "Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions.AutoFlushDuration { get; set; }", + "Stage": "Stable" + }, + { + "Member": "int Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions.MaxBufferSizeInBytes { get; set; }", + "Stage": "Stable" + }, + { + "Member": "int Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions.MaxLogRecordSizeInBytes { get; set; }", + "Stage": "Stable" + }, + { + "Member": "System.Collections.Generic.IList Microsoft.Extensions.Diagnostics.Buffering.GlobalLogBufferingOptions.Rules { get; set; }", + "Stage": "Stable" + } + ] + }, { "Type": "static class Microsoft.Extensions.DependencyInjection.LatencyConsoleExtensions", "Stage": "Stable", @@ -155,6 +201,38 @@ } ] }, + { + "Type": "class Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.LogBufferingFilterRule(string? categoryName = null, Microsoft.Extensions.Logging.LogLevel? logLevel = null, int? eventId = null, string? eventName = null, System.Collections.Generic.IReadOnlyList>? attributes = null);", + "Stage": "Stable" + } + ], + "Properties": [ + { + "Member": "System.Collections.Generic.IReadOnlyList>? Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.Attributes { get; }", + "Stage": "Stable" + }, + { + "Member": "string? Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.CategoryName { get; }", + "Stage": "Stable" + }, + { + "Member": "int? Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.EventId { get; }", + "Stage": "Stable" + }, + { + "Member": "string? Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.EventName { get; }", + "Stage": "Stable" + }, + { + "Member": "Microsoft.Extensions.Logging.LogLevel? Microsoft.Extensions.Diagnostics.Buffering.LogBufferingFilterRule.LogLevel { get; }", + "Stage": "Stable" + } + ] + }, { "Type": "class Microsoft.Extensions.Logging.LoggerEnrichmentOptions", "Stage": "Stable", @@ -294,6 +372,84 @@ "Stage": "Stable" } ] + }, + { + "Type": "class Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule : Microsoft.Extensions.Diagnostics.Sampling.ILogSamplingFilterRule", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.RandomProbabilisticSamplerFilterRule(double probability, string? categoryName = null, Microsoft.Extensions.Logging.LogLevel? logLevel = null, int? eventId = null, string? eventName = null);", + "Stage": "Stable" + } + ], + "Properties": [ + { + "Member": "string? Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.CategoryName { get; }", + "Stage": "Stable" + }, + { + "Member": "int? Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.EventId { get; }", + "Stage": "Stable" + }, + { + "Member": "string? Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.EventName { get; }", + "Stage": "Stable" + }, + { + "Member": "Microsoft.Extensions.Logging.LogLevel? Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.LogLevel { get; }", + "Stage": "Stable" + }, + { + "Member": "double Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerFilterRule.Probability { get; }", + "Stage": "Stable" + } + ] + }, + { + "Type": "class Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerOptions", + "Stage": "Stable", + "Methods": [ + { + "Member": "Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerOptions.RandomProbabilisticSamplerOptions();", + "Stage": "Stable" + } + ], + "Properties": [ + { + "Member": "System.Collections.Generic.IList Microsoft.Extensions.Diagnostics.Sampling.RandomProbabilisticSamplerOptions.Rules { get; set; }", + "Stage": "Stable" + } + ] + }, + { + "Type": "static class Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions", + "Stage": "Stable", + "Methods": [ + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddRandomProbabilisticSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Configuration.IConfiguration configuration);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddRandomProbabilisticSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddRandomProbabilisticSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder, double probability, Microsoft.Extensions.Logging.LogLevel? level = null);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder, Microsoft.Extensions.Logging.LoggingSampler sampler);", + "Stage": "Stable" + }, + { + "Member": "static Microsoft.Extensions.Logging.ILoggingBuilder Microsoft.Extensions.Logging.SamplingLoggerBuilderExtensions.AddTraceBasedSampler(this Microsoft.Extensions.Logging.ILoggingBuilder builder);", + "Stage": "Stable" + } + ] } ] } \ No newline at end of file diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerFilterRule.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerFilterRule.cs index aa0454ff739..b55b34f0da5 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerFilterRule.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerFilterRule.cs @@ -2,16 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Logging; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Diagnostics.Sampling; /// /// Defines a rule used to filter log messages for purposes of sampling. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public class RandomProbabilisticSamplerFilterRule : ILogSamplingFilterRule { /// diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerOptions.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerOptions.cs index 5c0cd89c675..4808eab9fc7 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerOptions.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/RandomProbabilisticSamplerOptions.cs @@ -3,16 +3,13 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Options; -using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.Diagnostics.Sampling; /// /// The options for the Random Probabilistic sampler. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public class RandomProbabilisticSamplerOptions { /// diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/SamplingLoggerBuilderExtensions.cs b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/SamplingLoggerBuilderExtensions.cs index 489b4462482..dfd9ad2b997 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/SamplingLoggerBuilderExtensions.cs +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Sampling/SamplingLoggerBuilderExtensions.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Diagnostics.Sampling; using Microsoft.Extensions.Options; -using Microsoft.Shared.DiagnosticIds; using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Logging; @@ -16,7 +15,6 @@ namespace Microsoft.Extensions.Logging; /// /// Extensions for configuring logging sampling. /// -[Experimental(diagnosticId: DiagnosticIds.Experiments.Telemetry, UrlFormat = DiagnosticIds.UrlFormat)] public static class SamplingLoggerBuilderExtensions { /// From e0dcbc0367299bd7ae873b440dd25dca46a5cea4 Mon Sep 17 00:00:00 2001 From: evgenyfedorov2 Date: Mon, 23 Jun 2025 12:36:47 +0200 Subject: [PATCH 2/2] Suppress LA0006 --- .../Microsoft.AspNetCore.Diagnostics.Middleware.csproj | 2 ++ .../Microsoft.Extensions.Telemetry.Abstractions.csproj | 2 ++ .../Microsoft.Extensions.Telemetry.csproj | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj index dd8d0e40847..15e0e9d9225 100644 --- a/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj +++ b/src/Libraries/Microsoft.AspNetCore.Diagnostics.Middleware/Microsoft.AspNetCore.Diagnostics.Middleware.csproj @@ -4,6 +4,8 @@ ASP.NET Core middleware for collecting high-quality telemetry. $(PackageTags);aspnetcore Telemetry + + $(NoWarn);LA0006 diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.csproj b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.csproj index 08a379be0e6..816ad679585 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.csproj +++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Microsoft.Extensions.Telemetry.Abstractions.csproj @@ -3,6 +3,8 @@ Microsoft.Extensions.Telemetry Common abstractions for high-level telemetry primitives. Telemetry + + $(NoWarn);LA0006 diff --git a/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.csproj b/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.csproj index 81d379cd381..9dc4a11ca6c 100644 --- a/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.csproj +++ b/src/Libraries/Microsoft.Extensions.Telemetry/Microsoft.Extensions.Telemetry.csproj @@ -3,6 +3,8 @@ Microsoft.Extensions.Diagnostics Provides canonical implementations of telemetry abstractions. Telemetry + + $(NoWarn);LA0006