Exemplo n.º 1
0
        private (MessageLogger[] MessageLoggers, ScopeLogger[]? ScopeLoggers) ApplyFilters(LoggerInformation[] loggers)
        {
            var messageLoggers = new List <MessageLogger>();
            List <ScopeLogger>?scopeLoggers = _filterOptions.CaptureScopes ? new List <ScopeLogger>() : null;

            foreach (LoggerInformation loggerInformation in loggers)
            {
                LoggerRuleSelector.Select(_filterOptions,
                                          loggerInformation.ProviderType,
                                          loggerInformation.Category,
                                          out LogLevel? minLevel,
                                          out Func <string?, string?, LogLevel, bool>?filter);

                if (minLevel is not null and > LogLevel.Critical)
                {
                    continue;
                }

                messageLoggers.Add(new MessageLogger(loggerInformation.Logger, loggerInformation.Category, loggerInformation.ProviderType.FullName, minLevel, filter));

                if (!loggerInformation.ExternalScope)
                {
                    scopeLoggers?.Add(new ScopeLogger(logger: loggerInformation.Logger, externalScopeProvider: null));
                }
            }

            if (_scopeProvider != null)
            {
                scopeLoggers?.Add(new ScopeLogger(logger: null, externalScopeProvider: _scopeProvider));
            }

            return(messageLoggers.ToArray(), scopeLoggers?.ToArray());
        }