public Log Read() { Log log; if (previousLine == null) { previousLine = lineReader.Read(); } if (previousLine == null) { return(null); } do { log = new Log(); log.Lines.Add(previousLine); while (true) { previousLine = lineReader.Read(); if (previousLine == null) { break; } if (logPrefixMatcher.Match(previousLine.Value)) { break; } log.Lines.Add(previousLine); } if (discardLogMatcher.Match(log.ToSingleLine())) { log = null; // me must restart loading of a new log } } while ((previousLine != null) && (log == null)); return(log); }