<PackageReference Include="System.ClientModel" Version="1.8.0" />

ClientLoggingOptions

public class ClientLoggingOptions
Exposes client options for logging within a ClientPipeline.
using Microsoft.Extensions.Logging; using System.ClientModel.Internal; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace System.ClientModel.Primitives { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class ClientLoggingOptions { private bool _frozen; private bool? _enableLogging; private bool? _enableMessageLogging; private bool? _enableMessageContentLogging; private int? _messageContentSizeLimit; [System.Runtime.CompilerServices.Nullable(2)] private ILoggerFactory _loggerFactory; [System.Runtime.CompilerServices.Nullable(2)] private PipelineMessageSanitizer _sanitizer; [System.Runtime.CompilerServices.Nullable(2)] private ChangeTrackingStringList _allowedHeaderNames; [System.Runtime.CompilerServices.Nullable(2)] private ChangeTrackingStringList _allowedQueryParameters; private static readonly HashSet<string> s_defaultAllowedHeaderNames = new HashSet<string> { "traceparent", "Accept", "Cache-Control", "Connection", "Content-Length", "Content-Type", "Date", "ETag", "Expires", "If-Match", "If-Modified-Since", "If-None-Match", "If-Unmodified-Since", "Last-Modified", "Pragma", "Retry-After", "Server", "Transfer-Encoding", "User-Agent", "WWW-Authenticate" }; private static readonly HashSet<string> s_defaultAllowedQueryParameters = new HashSet<string> { "api-version" }; private static readonly PipelineMessageSanitizer s_defaultSanitizer = new PipelineMessageSanitizer(s_defaultAllowedQueryParameters, s_defaultAllowedHeaderNames, "REDACTED"); internal const bool DefaultEnableLogging = true; internal const bool DefaultEnableMessageContentLogging = false; internal const int DefaultMessageContentSizeLimitBytes = 4096; internal const double RequestTooLongSeconds = 3; [System.Runtime.CompilerServices.Nullable(2)] public ILoggerFactory LoggerFactory { [System.Runtime.CompilerServices.NullableContext(2)] get { return _loggerFactory; } [System.Runtime.CompilerServices.NullableContext(2)] set { AssertNotFrozen(); _loggerFactory = value; } } public bool? EnableLogging { get { return _enableLogging; } set { AssertNotFrozen(); _enableLogging = value; } } public bool? EnableMessageLogging { get { return _enableMessageLogging; } set { AssertNotFrozen(); _enableMessageLogging = value; } } public bool? EnableMessageContentLogging { get { return _enableMessageContentLogging; } set { AssertNotFrozen(); _enableMessageContentLogging = value; } } public int? MessageContentSizeLimit { get { return _messageContentSizeLimit; } set { AssertNotFrozen(); _messageContentSizeLimit = value; } } public IList<string> AllowedHeaderNames { get { if (!_frozen) { if (_allowedHeaderNames == null) { ChangeTrackingStringList changeTrackingStringList = _allowedHeaderNames = new ChangeTrackingStringList(s_defaultAllowedHeaderNames); } return _allowedHeaderNames; } if (_allowedHeaderNames == null) { _allowedHeaderNames = new ChangeTrackingStringList(s_defaultAllowedHeaderNames); _allowedHeaderNames.Freeze(); } return _allowedHeaderNames; } } public IList<string> AllowedQueryParameters { get { if (!_frozen) { if (_allowedQueryParameters == null) { ChangeTrackingStringList changeTrackingStringList = _allowedQueryParameters = new ChangeTrackingStringList(s_defaultAllowedQueryParameters); } return _allowedQueryParameters; } if (_allowedQueryParameters == null) { _allowedQueryParameters = new ChangeTrackingStringList(s_defaultAllowedQueryParameters); _allowedQueryParameters.Freeze(); } return _allowedQueryParameters; } } internal bool AddMessageLoggingPolicy => EnableMessageLogging ?? EnableLogging.GetValueOrDefault(true); internal bool UseDefaultClientWideLogging { get { if (LoggerFactory == null) return !EnableLogging.HasValue; return false; } } internal bool AddDefaultMessageLoggingPolicy { get { if (!EnableLogging.HasValue && !MessageContentSizeLimit.HasValue && !EnableMessageLogging.HasValue && !EnableMessageContentLogging.HasValue && LoggerFactory == null && HeaderListIsDefault) return QueryParameterListIsDefault; return false; } } private bool HeaderListIsDefault { get { if (_allowedHeaderNames != null) return !_allowedHeaderNames.HasChanged; return true; } } private bool QueryParameterListIsDefault { get { if (_allowedQueryParameters != null) return !_allowedQueryParameters.HasChanged; return true; } } public virtual void Freeze() { _frozen = true; if (_allowedHeaderNames != null) _allowedHeaderNames.Freeze(); if (_allowedQueryParameters != null) _allowedQueryParameters.Freeze(); } protected void AssertNotFrozen() { if (_frozen) throw new InvalidOperationException("Cannot change a ClientLoggingOptions instance after the ClientPipeline is created."); } internal void ValidateOptions() { bool? enableLogging = EnableLogging; bool flag = false; if (((enableLogging.GetValueOrDefault() == flag) & enableLogging.HasValue) && (EnableMessageLogging.GetValueOrDefault() || EnableMessageContentLogging.GetValueOrDefault())) throw new InvalidOperationException("HTTP Message logging cannot be enabled when client-wide logging is disabled."); enableLogging = EnableMessageLogging; flag = false; if (((enableLogging.GetValueOrDefault() == flag) & enableLogging.HasValue) && EnableMessageContentLogging.GetValueOrDefault()) throw new InvalidOperationException("HTTP Message content logging cannot be enabled when HTTP message logging is disabled."); } internal PipelineMessageSanitizer GetPipelineMessageSanitizer() { if (HeaderListIsDefault && QueryParameterListIsDefault) return s_defaultSanitizer; HashSet<string> allowedHeaders = (_allowedHeaderNames == null) ? s_defaultAllowedHeaderNames : new HashSet<string>(_allowedHeaderNames, StringComparer.InvariantCultureIgnoreCase); HashSet<string> allowedQueryParameters = (_allowedQueryParameters == null) ? s_defaultAllowedQueryParameters : new HashSet<string>(_allowedQueryParameters, StringComparer.InvariantCultureIgnoreCase); if (_sanitizer == null) _sanitizer = new PipelineMessageSanitizer(allowedQueryParameters, allowedHeaders, "REDACTED"); return _sanitizer; } } }