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;
            }
        }
Exemple #2
0
        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);
                }
        }