/// <summary> /// バックグラウンド ロガーを構成します。 /// </summary> /// <typeparam name="TProvider">構成するロガー プロバイダの型。</typeparam> /// <param name="builder">ログ構成ビルダー。</param> /// <param name="defaultMinLevel">ロガーの既定の最小ログ レベル</param> /// <returns><paramref name="builder"/>。</returns> /// <exception cref="ArgumentNullException"><paramref name="builder"/> is <c>null</c>.</exception> public static ILoggingBuilder AddLogger <TProvider>(this ILoggingBuilder builder, LogLevel?defaultMinLevel = null) where TProvider : class, ILoggerProvider { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddConfiguration(); if (defaultMinLevel != null) { builder.Services.Configure <LoggerFilterOptions>(options => { var defaultRule = new LoggerFilterRule( providerName: typeof(TProvider).FullName , categoryName: null , logLevel: defaultMinLevel , filter: null ); options.Rules.Insert(0, defaultRule); }); } builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ILoggerProvider, TProvider>()); return(builder); }
private bool IsEnabled(ITelemetry item) { bool enabled = true; if (item is ISupportProperties telemetry && _filterOptions != null) { if (!telemetry.Properties.TryGetValue(LogConstants.CategoryNameKey, out string categoryName)) { // If no category is specified, it will be filtered by the default filter categoryName = string.Empty; } // Extract the log level and apply the filter if (telemetry.Properties.TryGetValue(LogConstants.LogLevelKey, out string logLevelString) && Enum.TryParse(logLevelString, out LogLevel logLevel)) { LoggerFilterRule filterRule = _ruleMap.GetOrAdd(categoryName, SelectRule(categoryName)); if (filterRule.LogLevel != null && logLevel < filterRule.LogLevel) { enabled = false; } else if (filterRule.Filter != null) { enabled = filterRule.Filter(ProviderType.FullName, categoryName, logLevel); } } } return(enabled); }
private void LoadRules(LoggerFilterOptions options, IConfigurationSection configurationSection, string logger) { foreach (var section in configurationSection.AsEnumerable(true)) { if (TryGetSwitch(section.Value, out var level)) { var category = section.Key; if (category.Equals(DefaultCategory, StringComparison.OrdinalIgnoreCase)) { category = null; } var newRule = new LoggerFilterRule(logger, category, level, null); options.Rules.Add(newRule); } } }
public void IsEnabled_LoggerFilterTests_Tests(string inputCategory, LogLevel inputLogLevel, bool expected) { LoggerFilterRule loggerFilterRule1 = new LoggerFilterRule(null, "Host.", LogLevel.None, null); LoggerFilterRule loggerFilterRule2 = new LoggerFilterRule(null, "Host.Startup", LogLevel.Debug, null); LoggerFilterOptions customFilterOptions = new LoggerFilterOptions(); customFilterOptions.MinLevel = LogLevel.Information; customFilterOptions.Rules.Add(loggerFilterRule1); customFilterOptions.Rules.Add(loggerFilterRule2); ColoredConsoleLogger coloredConsoleLogger = new ColoredConsoleLogger(inputCategory, new LoggingFilterHelper(_testConfiguration, true), customFilterOptions); bool result = coloredConsoleLogger.IsEnabled(inputCategory, inputLogLevel); Assert.Equal(expected, result); }
private void LoadRules(LoggerFilterOptions options, IConfigurationSection configurationSection, string logger) { foreach (var section in configurationSection.AsEnumerable(true)) { LogLevel level; if (TryGetSwitch(section.Value, out level)) { var category = section.Key; if (category == "Default") { category = null; } var newRule = new LoggerFilterRule(logger, category, level, null); options.Rules.Add(newRule); } } }
private bool IsEnabled(ITelemetry item) { bool enabled = true; if (item is ISupportProperties telemetry && _filterOptions != null) { if (!telemetry.Properties.TryGetValue(LogConstants.CategoryNameKey, out string categoryName)) { // If no category is specified, it will be filtered by the default filter categoryName = string.Empty; // WebJobs host does many internal calls, polling queues and blobs, etc... // we do not want to report all of them by default, but only those which are relevant for // function execution: bindings and user code (which have category and level stamped on the telemetry). // So, if there is no category on the operation telemtery (request or dependency), // it won't be tracked unless filter explicitly enables it if (telemetry is OperationTelemetry) { enabled = false; } } // Extract the log level and apply the filter if (telemetry.Properties.TryGetValue(LogConstants.LogLevelKey, out string logLevelString) && Enum.TryParse(logLevelString, out LogLevel logLevel)) { LoggerFilterRule filterRule = _ruleMap.GetOrAdd(categoryName, SelectRule(categoryName)); if (filterRule.LogLevel != null && logLevel < filterRule.LogLevel) { enabled = false; } else if (filterRule.Filter != null) { enabled = filterRule.Filter(ProviderType.FullName, categoryName, logLevel); } } } return(enabled); }
internal bool IsEnabled(string category, LogLevel logLevel) { LoggerFilterRule filterRule = SelectRule(category, _loggerFilterOptions); if (filterRule.LogLevel != null && logLevel < filterRule.LogLevel) { return(false); } if (filterRule.Filter != null) { bool enabled = filterRule.Filter(ProviderType.FullName, category, logLevel); if (!enabled) { return(false); } } if (filterRule.LogLevel != null) { return(Utilities.DefaultLoggingFilter(category, logLevel, filterRule.LogLevel.Value, filterRule.LogLevel.Value)); } return(Utilities.DefaultLoggingFilter(category, logLevel, _loggingFilterHelper.UserLogDefaultLogLevel, _loggingFilterHelper.SystemLogDefaultLogLevel)); }
public void SelectRule_Tests() { List <LoggerFilterRule> loggerFilterRules = new List <LoggerFilterRule>(); LoggerFilterRule loggerFilterRule = new LoggerFilterRule(null, "Host.", LogLevel.Trace, null); loggerFilterRules.Add(loggerFilterRule); LoggerFilterOptions customFilterOptions = new LoggerFilterOptions(); customFilterOptions.MinLevel = LogLevel.Information; customFilterOptions.Rules.Add(loggerFilterRule); ColoredConsoleLogger coloredConsoleLogger = new ColoredConsoleLogger("test", new LoggingFilterHelper(_testConfiguration, true), customFilterOptions); var startupLogsRule = coloredConsoleLogger.SelectRule("Host.Startup", customFilterOptions); Assert.NotNull(startupLogsRule.LogLevel); Assert.Equal(LogLevel.Trace, startupLogsRule.LogLevel); var functionLogsRule = coloredConsoleLogger.SelectRule("Function.TestFunction", customFilterOptions); Assert.NotNull(functionLogsRule.LogLevel); Assert.Equal(LogLevel.Information, functionLogsRule.LogLevel); }