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);
                 }
             }
         }
     }
 }