public void ProcessLine(string line, long lastReadLineStartPosition)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    var currentDay = records.Any() ? records.Last().Day : 0;
                    records.Add(new Record(currentDay, lastReadLineStartPosition));
                }
                else if (line.StartsWith("Logging started", StringComparison.Ordinal))
                {
                    var lastDay  = records.Any() ? records.Last().Day : 0;
                    var dayStamp = ParsingHelper.GetDateFromLogFileLoggingStarted(line);

                    ReadjustPreviousRecords(lastDay, dayStamp);

                    records.Add(new Record(dayStamp.Day, lastReadLineStartPosition));
                    LastLogLineStamp = TimeSpan.Zero;
                }
                else
                {
                    var currentDay = records.Any() ? records.Last().Day : 0;
                    var lineStamp  = ParsingHelper.GetTimestampFromLogLine(line);

                    if (OverflowsToNextDay(lineStamp))
                    {
                        LastLogLineStamp = TimeSpan.Zero;
                        if (!(OverflowsBeyondToday(currentDay + 1) || OverflowsBeyondMaxMonth(currentDay + 1)))
                        {
                            currentDay++;
                        }
                    }
                    else
                    {
                        LastLogLineStamp = lineStamp;
                    }

                    records.Add(new Record(currentDay, lastReadLineStartPosition));
                }
            }
            catch (WurmApiException exception)
            {
                // this line must be added to records, because lastReadLineStartPosition
                var currentDay = records.Any() ? records.Last().Day : 0;
                records.Add(new Record(currentDay, lastReadLineStartPosition));
                // ignore this line
                logger.Log(
                    LogLevel.Warn,
                    string.Format("Unexpected exception while parsing line: {0}", line),
                    this,
                    exception);
            }
        }
        public void ProcessLine(string line, long lastReadLineStartPosition)
        {
            AssertResultNotTaken();

            LineCounter++;
            try
            {
                if (line.StartsWith("Logging started", StringComparison.Ordinal))
                {
                    var dayStamp = ParsingHelper.GetDateFromLogFileLoggingStarted(line);
                    if (dayStamp.Day > CurrentDay)
                    {
                        CurrentDay = dayStamp.Day;
                        LastLogLineStamp = TimeSpan.Zero;
                        AdvanceDays(line, lastReadLineStartPosition);
                    }
                    else if (firstLoggingStartedFound && dayStamp.Day < CurrentDay)
                    {
                        //seems the logs have invalid timestamps, we need to flag for rollback
                        RollbackHeuristics(dayStamp.Day);
                    }
                    firstLoggingStartedFound = true;
                }
                else
                {
                    var lineStamp = ParsingHelper.GetTimestampFromLogLine(line);
                    if (lineStamp < LastLogLineStamp
                        && ParsingHelper.AreMoreThanOneHourAppartOnSameDay(lineStamp, LastLogLineStamp))
                    {
                        CurrentDay++;
                        LastLogLineStamp = TimeSpan.Zero;
                        AdvanceDays(line, lastReadLineStartPosition);
                    }
                    else
                    {
                        LastLogLineStamp = lineStamp;
                    }
                }
            }
            catch (WurmApiException exception)
            {
                // ignore this line
                logger.Log(
                    LogLevel.Warn,
                    string.Format("Unexpected exception while parsing line: {0}", line),
                    this,
                    exception);
            }
        }