| File: Logging\LoggingRedactionOptions.cs | Web Access |
| Project: src\src\Libraries\Microsoft.AspNetCore.Diagnostics.Middleware\Microsoft.AspNetCore.Diagnostics.Middleware.csproj (Microsoft.AspNetCore.Diagnostics.Middleware) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #if NET8_0_OR_GREATER using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Http.Diagnostics; using Microsoft.Shared.DiagnosticIds; namespace Microsoft.AspNetCore.Diagnostics.Logging; /// <summary> /// Top-level model for redacting incoming HTTP requests and their corresponding responses. /// </summary> [Experimental(diagnosticId: DiagnosticIds.Experiments.HttpLogging, UrlFormat = DiagnosticIds.UrlFormat)] public class LoggingRedactionOptions { private const IncomingPathLoggingMode DefaultRequestPathLoggingMode = IncomingPathLoggingMode.Formatted; private const HttpRouteParameterRedactionMode DefaultPathParameterRedactionMode = HttpRouteParameterRedactionMode.Strict; /// <summary> /// Gets or sets a strategy how request path should be logged. /// </summary> /// <value> /// The default value is <see cref="IncomingPathLoggingMode.Formatted"/>. /// </value> /// <remarks> /// Make sure you add redactors to ensure that sensitive information doesn't find its way into your log records. /// This option only applies when the <see cref="RequestPathParameterRedactionMode"/> /// option is not set to <see cref="HttpRouteParameterRedactionMode.None"/>. /// </remarks> public IncomingPathLoggingMode RequestPathLoggingMode { get; set; } = DefaultRequestPathLoggingMode; /// <summary> /// Gets or sets a value indicating how request path parameter should be redacted. /// </summary> /// <value> /// The default value is <see cref="HttpRouteParameterRedactionMode.Strict"/>. /// </value> public HttpRouteParameterRedactionMode RequestPathParameterRedactionMode { get; set; } = DefaultPathParameterRedactionMode; /// <summary> /// Gets or sets a map between HTTP path parameters and their data classification. /// </summary> /// <value> /// The default value is an empty dictionary. /// </value> /// <remarks> /// If a parameter within a controller's action is not annotated with a data classification attribute and /// it's not found in this map, it will be redacted as if it was <see cref="DataClassification.Unknown"/>. /// If you don't want a parameter to be redacted, mark it as <see cref="DataClassification.None"/>. /// </remarks> [Required] public IDictionary<string, DataClassification> RouteParameterDataClasses { get; set; } = new Dictionary<string, DataClassification>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Gets or sets a map between request headers to be logged and their data classification. /// </summary> /// <value> /// The default value is an empty dictionary, which means that no request header is logged by default. /// </value> [Required] public IDictionary<string, DataClassification> RequestHeadersDataClasses { get; set; } = new Dictionary<string, DataClassification>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Gets or sets a map between response headers to be logged and their data classification. /// </summary> /// <value> /// The default value is an empty dictionary, which means that no response header is logged by default. /// </value> [Required] public IDictionary<string, DataClassification> ResponseHeadersDataClasses { get; set; } = new Dictionary<string, DataClassification>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Gets or sets the set of HTTP paths that should be excluded from logging. /// </summary> /// <value> /// The default value is an empty <see cref="HashSet{T}"/>. /// </value> /// <remarks> /// Any path added to the set will not be logged. /// Paths are case insensitive. /// </remarks> /// <example> /// A typical set of HTTP paths would be: /// - "/probe/live". /// - "/probe/ready". /// </example> [Required] public ISet<string> ExcludePathStartsWith { get; set; } = new HashSet<string>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Gets or sets a value indicating whether to report unmatched routes. /// </summary> /// <remarks> /// If set to true, instead of logging <i>unknown</i> value for path attribute it will log whole path of routes not identified by ASP.NET Routing. /// </remarks> /// <value>Defaults to <see langword="false"/>.</value> public bool IncludeUnmatchedRoutes { get; set; } } #endif