public IEnumerable <ISiteTransaction> GetLogs(ISite site, DateTime lastLogDate, IEnumerable <SiteTransactionFilterExcludedItem> filterExcludedItems = null)
        {
            if (logFile == null)
            {
                return(null);
            }

            IList <ISiteTransaction> logs = new List <ISiteTransaction>();

            while (logFileReader.Peek() > 0)
            {
                string line = logFileReader.ReadLine();
                if (line.StartsWith("#") && !line.StartsWith(fields))
                {
                    continue;
                }

                if (line.StartsWith(fields))
                {
                    string colHeadersRaw = line.Substring(fields.Length, line.Length - fields.Length);
                    InitializeIndexDictionary(colHeadersRaw);
                }
                else
                {
                    if (logIndexDictionary.Count < 1)
                    {
                        return(null);
                    }

                    ISiteTransaction parsedLine = ParseLine(line);
                    if (filterExcludedItems != null)
                    {
                        parsedLine = FilterLine(parsedLine, filterExcludedItems);
                    }

                    if (parsedLine?.LogDate <= lastLogDate)
                    {
                        parsedLine = null;
                    }

                    if (parsedLine != null)
                    {
                        parsedLine.SiteId = site.Id;
                        logs.Add(parsedLine);
                    }
                }
            }

            logFile.Close();
            logFile.Dispose();
            return(logs);
        }
        private ISiteTransaction FilterLine(ISiteTransaction transaction, IEnumerable <SiteTransactionFilterExcludedItem> siteTransactionFilters)
        {
            string uri = transaction.RequestUri;

            foreach (SiteTransactionFilterExcludedItem siteTransactionFilter in siteTransactionFilters)
            {
                if (uri.Contains(siteTransactionFilter.Name))
                {
                    return(null);
                }
            }
            return(transaction);
        }