internal void GetTargetsByLevelForLogger(string name, LoggingRuleCollection rules, TargetWithFilterChain[] targetsByLevel, TargetWithFilterChain[] lastTargetsByLevel) { foreach (LoggingRule rule in rules) { if (rule.NameMatches(name)) { for (int i = 0; i <= LogLevel.MaxLevel.Ordinal; ++i) { if (i >= GlobalThreshold.Ordinal && rule.IsLoggingEnabledForLevel(LogLevel.FromOrdinal(i))) { foreach (Target target in rule.Targets) { TargetWithFilterChain awf = new TargetWithFilterChain(target, rule.Filters); if (lastTargetsByLevel[i] != null) { lastTargetsByLevel[i].Next = awf; } else { targetsByLevel[i] = awf; } lastTargetsByLevel[i] = awf; } } } GetTargetsByLevelForLogger(name, rule.ChildRules, targetsByLevel, lastTargetsByLevel); if (rule.Final) { break; } } } for (int i = 0; i <= LogLevel.MaxLevel.Ordinal; ++i) { TargetWithFilterChain tfc = targetsByLevel[i]; if (tfc != null) { tfc.PrecalculateNeedsStackTrace(); } } }