using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Tango.Logging; namespace Tango.MachineStudio.Logging.Parsing { public class ApplicationLogFileParser : ILogFileParser { public List GetLogFiles() { List logFiles = new List(); FileLogger logger = LogManager.Default.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; String logFile = logger != null ? logger.LogFile : null; foreach (var file in Directory.GetFiles(FileLogger.DefaultLogsFolder, "*.log").Where(x => Path.GetFileName(x).StartsWith("Tango.MachineStudio.UI") && x != logger.LogFile)) { String dateString = Path.GetFileNameWithoutExtension(file).Replace("Tango.MachineStudio.UI-", ""); DateTime date = DateTime.ParseExact(dateString, "dd-MM-yyyy_HH-mm-ss", CultureInfo.InvariantCulture); logFiles.Add(new LogFile() { DateTime = date, File = file }); } return logFiles; } public List Parse(LogFile logFile) { List logItems = new List(); String text = File.ReadAllText(logFile.File); var logs = Regex.Split(text, @"(\[\d{2}:\d{2}:\d{2}.\d{2}\])"); for (int i = 1; i < logs.Length; i += 2) { try { DateTime date = DateTime.ParseExact(logs[i].Replace("[", "").Replace("]", ""), "HH:mm:ss.ff", CultureInfo.InvariantCulture); String rest = logs[i + 1]; var entries = Regex.Split(rest, @"\[(.*?)\]"); MessageLogItem item = new MessageLogItem(); item.TimeStamp = new DateTime(logFile.DateTime.Year, logFile.DateTime.Month, logFile.DateTime.Day, date.Hour, date.Minute, date.Second, date.Millisecond); item.Category = (LogCategory)Enum.Parse(typeof(LogCategory), entries[1]); item.CallerFile = entries[3]; item.CallerMethodName = entries[5]; item.CallerLineNumber = int.Parse(entries[7]); item.Message = new String(entries[8].Skip(2).ToArray()); logItems.Add(item); } catch (Exception ex) { //TODO: What to do now ? } } return logItems; } } }