public static List<LogMessageModel> ParseAllMessages(string logFilePath) { //can't use File.ReadAllText since file is locked by NLog using (var fileStream = new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var textReader = new StreamReader(fileStream, Encoding.UTF8)) { var logMessages = new List<LogMessageModel>(); StringBuilder curBuilder = null; LogMessageModel curMessage = null; //commit current message, if any Action commitCurMessage = () => { if(curBuilder != null && curMessage != null) curMessage.Message = curBuilder.ToString(); }; while (!textReader.EndOfStream) { var logLine = textReader.ReadLine(); var logLevel = parseLogLevel(logLine); if (logLevel != null) { commitCurMessage(); //start new message curMessage = new LogMessageModel { Level = logLevel }; curBuilder = new StringBuilder().AppendLine(logLine); logMessages.Add(curMessage); } else if (curBuilder != null) { //curBuilder may be null if we have an empty file with only a newline char curBuilder.AppendLine(logLine); } } commitCurMessage(); return logMessages; } }
public static List <LogMessageModel> ParseAllMessages(string logFilePath) { //can't use File.ReadAllText since file is locked by NLog using (var fileStream = new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var textReader = new StreamReader(fileStream, Encoding.UTF8)) { var logMessages = new List <LogMessageModel>(); StringBuilder curBuilder = null; LogMessageModel curMessage = null; //commit current message, if any Action commitCurMessage = () => { if (curBuilder != null && curMessage != null) { curMessage.Message = curBuilder.ToString(); } }; while (!textReader.EndOfStream) { var logLine = textReader.ReadLine(); var logLevel = parseLogLevel(logLine); if (logLevel != null) { commitCurMessage(); //start new message curMessage = new LogMessageModel { Level = logLevel }; curBuilder = new StringBuilder().AppendLine(logLine); logMessages.Add(curMessage); } else if (curBuilder != null) //curBuilder may be null if we have an empty file with only a newline char { curBuilder.AppendLine(logLine); } } commitCurMessage(); return(logMessages); } }