public static int SearchEventLog(string logLocation, string query, string writeOutputpath, string filterText, bool boolGroupProperties)
        {
            FileInfo           info    = new FileInfo(logLocation);
            List <EventRecord> results = new List <EventRecord>();
            int recordCount            = 0;

            if (info.Length > 800000000) //clipping level to avoid running out of memory
            {
                try
                {
                    EventLogQuery  eventsQuery = new EventLogQuery(logLocation, PathType.FilePath, query);
                    EventLogReader logReader   = new EventLogReader(eventsQuery);

                    for (EventRecord eventdetail = logReader.ReadEvent(); eventdetail != null; eventdetail = logReader.ReadEvent())
                    {
                        results.Add(eventdetail);
                        EventLogHelper.WriteEventRecords(results, writeOutputpath, filterText, true, boolGroupProperties);
                        recordCount += 1;
                        results.Clear();
                    }
                }
                catch (EventLogNotFoundException e)
                {
                    string errorString = e.ToString();
                    File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\error.log", logLocation + "|" + query + "|" + errorString + "\n");
                }
                return(recordCount);
            }
            else
            {
                results     = SearchEventLogs(logLocation, query);
                recordCount = EventLogHelper.WriteEventRecords(results, writeOutputpath, filterText, true, boolGroupProperties);
                return(recordCount);
            }
        }