/// <summary> /// </summary> /// <param name="filePath"> /// Path of Log File, Should be in XmlLayoutLog4j Format /// </param> /// <param name="lastIndexCount"> /// Last Index of LogEntry, Default is Zero /// </param> /// <returns> /// </returns> public IEnumerable <LogItem> Parse(string filePath, int lastIndexCount = 1) { var logItems = new List <LogItem>(); var fileText = ReadFile(filePath); using (var stringReader = new StringReader(fileText)) { using (var xmlReader = new XmlTextReader(stringReader) { Namespaces = false }) { try { while (xmlReader.Read()) { if ((xmlReader.NodeType != XmlNodeType.Element) || (xmlReader.Name != "log4j:event")) { continue; } var logItem = new LogItem { Index = lastIndexCount, TimeStamp = ReadLogTimeStamp(xmlReader), Thread = ReadLogThread(xmlReader), LogFile = filePath, Level = ReadLogLevel(xmlReader) }; while (xmlReader.Read()) { var breakLoop = false; switch (xmlReader.Name) { case "log4j:event": breakLoop = true; break; default: switch (xmlReader.Name) { case ("log4j:message"): { logItem.Message = xmlReader.ReadString(); break; } case ("log4j:data"): { switch (xmlReader.GetAttribute("name")) { case ("log4jmachinename"): { logItem.MachineName = xmlReader.GetAttribute("value"); break; } case ("log4net:HostName"): { logItem.HostName = xmlReader.GetAttribute("value"); break; } case ("log4net:UserName"): { logItem.UserName = xmlReader.GetAttribute("value"); break; } case ("log4net:Identity"): { logItem.Identity = xmlReader.GetAttribute("value"); break; } case ("NDC"): { logItem.NDC = xmlReader.GetAttribute("value"); break; } case ("log4japp"): { logItem.App = xmlReader.GetAttribute("value"); break; } } break; } // ReSharper disable StringLiteralsWordIsNotInDictionary case ("log4j:throwable"): // ReSharper restore StringLiteralsWordIsNotInDictionary { logItem.Throwable = xmlReader.ReadString(); break; } case ("log4j:locationInfo"): { logItem.Class = ParseClassName(xmlReader.GetAttribute("class")); logItem.Method = xmlReader.GetAttribute("method"); logItem.File = xmlReader.GetAttribute("file"); logItem.Line = xmlReader.GetAttribute("line"); break; } } break; } if (breakLoop) { break; } } logItems.Add(logItem); lastIndexCount++; } } catch (XmlException xmlException) { } } } return(logItems); }
/// <summary> /// </summary> /// <param name="filePath"> /// Path of Log File, Should be in XmlLayoutLog4j Format /// </param> /// <param name="lastIndexCount"> /// Last Index of LogEntry, Default is Zero /// </param> /// <returns> /// </returns> public IEnumerable<LogItem> Parse(string filePath, int lastIndexCount = 1) { var logItems = new List<LogItem>(); var fileText = ReadFile(filePath); using (var stringReader = new StringReader(fileText)) { using (var xmlReader = new XmlTextReader(stringReader) {Namespaces = false}) { try { while (xmlReader.Read()) { if ((xmlReader.NodeType != XmlNodeType.Element) || (xmlReader.Name != "log4j:event")) { continue; } var logItem = new LogItem { Index = lastIndexCount, TimeStamp = ReadLogTimeStamp(xmlReader), Thread = ReadLogThread(xmlReader), LogFile = filePath, Level = ReadLogLevel(xmlReader) }; while (xmlReader.Read()) { var breakLoop = false; switch (xmlReader.Name) { case "log4j:event": breakLoop = true; break; default: switch (xmlReader.Name) { case ("log4j:message"): { logItem.Message = xmlReader.ReadString(); break; } case ("log4j:data"): { switch (xmlReader.GetAttribute("name")) { case ("log4jmachinename"): { logItem.MachineName = xmlReader.GetAttribute("value"); break; } case ("log4net:HostName"): { logItem.HostName = xmlReader.GetAttribute("value"); break; } case ("log4net:UserName"): { logItem.UserName = xmlReader.GetAttribute("value"); break; } case ("log4net:Identity"): { logItem.Identity = xmlReader.GetAttribute("value"); break; } case ("NDC"): { logItem.NDC = xmlReader.GetAttribute("value"); break; } case ("log4japp"): { logItem.App = xmlReader.GetAttribute("value"); break; } } break; } // ReSharper disable StringLiteralsWordIsNotInDictionary case ("log4j:throwable"): // ReSharper restore StringLiteralsWordIsNotInDictionary { logItem.Throwable = xmlReader.ReadString(); break; } case ("log4j:locationInfo"): { logItem.Class = ParseClassName(xmlReader.GetAttribute("class")); logItem.Method = xmlReader.GetAttribute("method"); logItem.File = xmlReader.GetAttribute("file"); logItem.Line = xmlReader.GetAttribute("line"); break; } } break; } if (breakLoop) { break; } } logItems.Add(logItem); lastIndexCount++; } } catch (XmlException xmlException) { } } } return logItems; }