protected virtual void ProcessLevelLoggerAndChildren(LevelLogger levelLogger, LogLine.LogType[] logTypes, ref StringBuilder sb, int level) { var children = levelLogger.GetChildren(); if (children != null) { var prefix = GetPrefixIndent(level); foreach (var child in children) { var logLine = child as LogLine; if (logLine != null) { if (logTypes == null || logTypes.Contains(logLine.Type)) { sb.AppendLine(String.Format("{0} {1}", prefix, OutputLogLine(logLine))); continue; } } var childLevelLogger = child as LevelLogger; if (childLevelLogger != null) { if (childLevelLogger.HasErrorsOrInfos()) { var keys = childLevelLogger.HasKeys() ? GetKeys(childLevelLogger) : ""; var name = GetCategoryName(childLevelLogger); if (!String.IsNullOrEmpty(name)) { sb.AppendLine(String.Format("{0} {1} {2}", prefix, name, keys)); } ProcessLevelLoggerAndChildren(childLevelLogger, logTypes, ref sb, level + 1); } } } } }