using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Logging; using System.Text.RegularExpressions; using System.IO; using System.Globalization; namespace Tango.LogViewer.UI.LogViewerFileParser { public class ApplicationLogViewerParser : ILogViewerParser { public ApplicationLogViewerParser() { } public void Parse(string file, DateTime datetime, ref List logItems) { String text = File.ReadAllText(file); var logs = Regex.Split(text, @"(\[\d{2}:\d{2}:\d{2}.\d{2}\])"); String logText = String.Empty; for (int i = 1; i < logs.Length; i += 2) { try { DateTime date = DateTime.ParseExact(logs[i].Replace("[", "").Replace("]", ""), "HH:mm:ss.ff", CultureInfo.InvariantCulture); logText = logs[i + 1]; var matches = Regex.Matches(logText, @"(?<=\[)(.*?)(?=\])"); MessageLogItem item = new MessageLogItem(); item.TimeStamp = new DateTime(datetime.Year, datetime.Month, datetime.Day, date.Hour, date.Minute, date.Second, date.Millisecond); item.Category = (LogCategory)Enum.Parse(typeof(LogCategory), matches[0].ToString()); item.CallerFile = matches[1].ToString(); item.CallerMethodName = matches[2].ToString(); item.CallerLineNumber = int.Parse(matches[3].ToString()); int messageStartIndex = matches[3].Index + matches[3].Length + 2; item.Message = logText.Substring(messageStartIndex, logText.Length - messageStartIndex); logItems.Add(item); } catch (Exception ex) { LogManager.Default.Log(ex, "Could not parse log line: " + logText); } } } } }