private static void ProcessChildNodes(XmlReader xmlTextReader, LogEntry entry) { while (xmlTextReader.Read()) { var hasNoMoreChildToProcess = ProcessChildNode(xmlTextReader, entry); if (hasNoMoreChildToProcess) break; } }
private static bool ProcessChildNode(XmlReader xmlTextReader, LogEntry entry) { switch (xmlTextReader.Name) { case "log4j:event": return true; case ("log4j:message"): entry.Message = xmlTextReader.ReadString(); break; case ("log4j:data"): ProcessDataTag(xmlTextReader, entry); break; case ("log4j:throwable"): entry.Throwable = xmlTextReader.ReadString(); break; case ("log4j:locationInfo"): SetLocationInfo(entry, xmlTextReader); break; } return false; }
private static void ProcessDataTag(XmlReader xmlTextReader, LogEntry entry) { switch (xmlTextReader.GetAttribute("name")) { case ("log4net:UserName"): entry.UserName = xmlTextReader.GetAttribute("value"); break; case ("log4japp"): entry.App = xmlTextReader.GetAttribute("value"); break; case ("log4jmachinename"): entry.MachineName = xmlTextReader.GetAttribute("value"); break; case ("log4net:HostName"): entry.HostName = xmlTextReader.GetAttribute("value"); break; } }
private static void SetLocationInfo(LogEntry entry, XmlReader xmlTextReader) { entry.Class = xmlTextReader.GetAttribute("class"); entry.Method = xmlTextReader.GetAttribute("method"); entry.File = xmlTextReader.GetAttribute("file"); entry.Line = xmlTextReader.GetAttribute("line"); }
private static IEnumerable<LogEntry> ProcessLogEntry(XmlReader xmlTextReader, string logFile, DateTime date) { DateTime? prevTimeStamp = null; while (xmlTextReader.Read()) { if ((xmlTextReader.NodeType != XmlNodeType.Element) || (xmlTextReader.Name != "log4j:event")) continue; var entry = new LogEntry(); entry.Path = logFile; entry.Logger = xmlTextReader.GetAttribute("logger"); entry.TimeStamp = date.AddMilliseconds(Convert.ToDouble(xmlTextReader.GetAttribute("timestamp"))).ToLocalTime(); if (prevTimeStamp.HasValue) entry.Delta = (entry.TimeStamp - prevTimeStamp.Value).TotalSeconds; prevTimeStamp = entry.TimeStamp; var severityLevel = xmlTextReader.GetAttribute("level"); entry.SeverityLevel = severityLevel; entry.Thread = xmlTextReader.GetAttribute("thread"); ProcessChildNodes(xmlTextReader, entry); yield return entry; } }