internal LoggerConfiguration GetConfigurationForLogger(string name, LoggingConfiguration configuration) { var targetsByLevel = new TargetWithFilterChain[LogLevel.MaxLevel.Ordinal + 1]; var lastTargetsByLevel = new TargetWithFilterChain[LogLevel.MaxLevel.Ordinal + 1]; if (configuration != null && IsLoggingEnabled()) { GetTargetsByLevelForLogger(name, configuration.LoggingRules, targetsByLevel, lastTargetsByLevel); } InternalLogger.Debug("Targets for {0} by level:", name); for (var i = 0; i <= LogLevel.MaxLevel.Ordinal; ++i) { var sb = new StringBuilder(); sb.AppendFormat(CultureInfo.InvariantCulture, "{0} =>", LogLevel.FromOrdinal(i)); for (var afc = targetsByLevel[i]; afc != null; afc = afc.NextInChain) { sb.AppendFormat(CultureInfo.InvariantCulture, " {0}", afc.Target.Name); if (afc.FilterChain.Count > 0) { sb.AppendFormat(CultureInfo.InvariantCulture, " ({0} filters)", afc.FilterChain.Count); } } InternalLogger.Debug(sb.ToString()); } return(new LoggerConfiguration(targetsByLevel)); }
internal void GetTargetsByLevelForLogger(string name, IList <LoggingRule> rules, TargetWithFilterChain[] targetsByLevel, TargetWithFilterChain[] lastTargetsByLevel) { foreach (var rule in rules) { if (!rule.NameMatches(name)) { continue; } for (var i = 0; i <= LogLevel.MaxLevel.Ordinal; ++i) { if (i < GlobalThreshold.Ordinal || !rule.IsLoggingEnabledForLevel(LogLevel.FromOrdinal(i))) { continue; } foreach (var target in rule.Targets) { var awf = new TargetWithFilterChain(target, rule.Filters); if (lastTargetsByLevel[i] != null) { lastTargetsByLevel[i].NextInChain = awf; } else { targetsByLevel[i] = awf; } lastTargetsByLevel[i] = awf; } } GetTargetsByLevelForLogger(name, rule.ChildRules, targetsByLevel, lastTargetsByLevel); if (rule.Final) { break; } } for (var i = 0; i <= LogLevel.MaxLevel.Ordinal; ++i) { var tfc = targetsByLevel[i]; if (tfc != null) { tfc.PrecalculateStackTraceUsage(); } } }