Esempio n. 1
0
        /// <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);
         }
     }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
                }
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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);
        }