public static LogFileProvider Open(string filePath, BackgroundWorker worker, DoWorkEventArgs e) { try { logger.DebugFormat("Parsing log events from file {0}", filePath); LogFileProvider logs = new LogFileProvider(); logs.location = filePath; LogFileProvider.read(logs, worker, e); return(logs); } catch (Exception ex) { throw new OpenLogFileException(filePath, ex); } }
private static bool read(LogFileProvider logs, BackgroundWorker worker, DoWorkEventArgs e) { DataTable t = logs.dataSet.Tables["LogData"]; using (StreamReader rd = new StreamReader(new FileStream(logs.Location, FileMode.Open, FileAccess.Read, FileShare.Delete))) { long fileSize = rd.BaseStream.Length; using (new Tools.PerfMonitor(string.Format("Time taken to load {0} ({1} kb)", logs.Location, fileSize / 1024))) { if (logs.lastPosition > fileSize) { return(false); } rd.BaseStream.Position = logs.lastPosition; int i = logs.LastLine; double charRead = 0; logEvent l = new logEvent(); while (!rd.EndOfStream) { string lStr = rd.ReadLine(); logEvent nl = parsingRules.ParseLine(lStr, i++); if (nl.IsValid) { addRow(t, l); l = nl; } else { l.Message += ("\r\n" + lStr); } charRead += lStr.Length; int progress = (int)Math.Truncate((charRead / fileSize) * 100); if (worker != null) { worker.ReportProgress(progress); if (worker.CancellationPending) { t.RejectChanges(); e.Cancel = true; return(false); } } } addRow(t, l); t.AcceptChanges(); if (e != null) { e.Result = logs; } logs.lastPosition = rd.BaseStream.Position; logs.lastLine = i; } logs.isValid = true; logs.status = LogProviderStatus.Online; } return(true); }
public static LogFileProvider Open(string filePath) { return(LogFileProvider.Open(filePath, null, null)); }
public void Watch(BackgroundWorker worker, DoWorkEventArgs e) { logger.DebugFormat("Tailing file {0}", this.Location); LogFileProvider.read(this, worker, e); }