LogViewer.LogEntryParser.Parse C# (CSharp) Method

Parse() public method

public Parse ( Stream s ) : IEnumerable
s Stream
return IEnumerable
        public IEnumerable<LogEntry> Parse(Stream s)
        {
            var nt = new NameTable ();
            var nsmgr = new XmlNamespaceManager (nt);
            nsmgr.AddNamespace ("log4j", "http://jakarta.apache.org/log4j/");
            nsmgr.AddNamespace ("log4net", "http://logging.apache.org/log4net/");
            // Create the XmlParserContext.
            var context = new XmlParserContext (null, nsmgr, null, XmlSpace.None);

            // Create the reader.
            var settings = new XmlReaderSettings
            {
                ConformanceLevel = ConformanceLevel.Fragment,
                CheckCharacters = false,
                XmlResolver = null,
                DtdProcessing = DtdProcessing.Ignore
            };
            var list = new List<LogEntry> ();
            var encoding = Encoding.UTF8;
            var xmlreader = XmlReader.Create (new StreamReader (s, encoding), settings, context);

            Names names = new Names{
             @event = xmlreader.NameTable.Add ("event"),
             message = xmlreader.NameTable.Add ("message"),
             properties = xmlreader.NameTable.Add ("properties"),
             data = xmlreader.NameTable.Add ("data"),
             ndc = xmlreader.NameTable.Add("NDC"),
             name = xmlreader.NameTable.Add ("name"),
             @value = xmlreader.NameTable.Add ("value"),
             throwable = xmlreader.NameTable.Add ("throwable"),
             exception = xmlreader.NameTable.Add ("exception"),
             timestamp = xmlreader.NameTable.Add ("timestamp"),
             thread = xmlreader.NameTable.Add ("thread"),
             domain = xmlreader.NameTable.Add ("domain"),
             level = xmlreader.NameTable.Add ("level"),
             logger = xmlreader.NameTable.Add ("logger"),
             locationinfo = xmlreader.NameTable.Add ("locationInfo"),
             @class = xmlreader.NameTable.Add ("class"),
             method = xmlreader.NameTable.Add ("method"),
             file = xmlreader.NameTable.Add ("file"),
             line = xmlreader.NameTable.Add ("line"),
             username = xmlreader.NameTable.Add ("username")};

            while (xmlreader.Read()) {
                switch (xmlreader.NodeType) {
                case XmlNodeType.Whitespace:
                    break;
                case XmlNodeType.Element:
                    if (Object.ReferenceEquals (xmlreader.LocalName, names.@event)) {
                        LogEntry logentry = null;
                        logentry = new LogEntry ();
                        if (xmlreader.HasAttributes) {
                            while (xmlreader.MoveToNextAttribute()) {
                                if (Object.ReferenceEquals (xmlreader.LocalName, names.timestamp)) {
                                    var timestamp = xmlreader.Value;
                                    if (!string.IsNullOrEmpty (timestamp)) {
                                        double dSeconds;
                                        logentry.Data.TimeStamp = Double.TryParse (timestamp, out dSeconds)
                                                                      ? _dt.AddMilliseconds (dSeconds).ToLocalTime ()
                                                                      : DateTime.Parse (timestamp).ToLocalTime ();
                                    }
                                } else if (Object.ReferenceEquals (xmlreader.LocalName, names.thread))
                                {
                                    logentry.Data.ThreadName = xmlreader.Value;
                                }
                                else if (Object.ReferenceEquals (xmlreader.LocalName, names.domain))
                                {
                                    logentry.Data.Domain = xmlreader.Value;
                                }
                                else if (Object.ReferenceEquals (xmlreader.LocalName, names.level)) {
                                    logentry.Data.Level = LogEntry.GetLevel(xmlreader.Value);
                                    logentry.Image = LogEntryParser.ParseImageType (logentry.Data.Level.Name);
                                } else if (Object.ReferenceEquals (xmlreader.LocalName, names.logger))
                                {
                                    logentry.Data.LoggerName = xmlreader.Value;
                                }
                                else if (Object.ReferenceEquals (xmlreader.LocalName, names.username))
                                {
                                    logentry.Data.UserName = xmlreader.Value;
                                }
                                else {
                                    throw new NotImplementedException (xmlreader.LocalName);
                                }
                            }
                            xmlreader.MoveToElement ();
                        }

                        EventChildren (xmlreader, names, logentry);
                        list.Add (logentry);
                    } else {
                        Console.WriteLine (xmlreader.NodeType + ", " + xmlreader.Name + ": " + xmlreader.Value);
                        throw new NotImplementedException ();
                    }
                    break;
                default:
                    Console.WriteLine (xmlreader.NodeType + ", " + xmlreader.Name + ": " + xmlreader.Value);
                    throw new NotImplementedException (xmlreader.NodeType.ToString ());
                }
            }
            return list;
        }

Usage Example

 public IEnumerable<LogEntry> Read(LogEntryParser parser)
 {
     using (var file = FileUtil.OpenReadOnly(FileName, position))
     {
         foreach (var item in parser.Parse(file))
         {
             yield return item;
         }
         position = file.Position;
     }
 }
All Usage Examples Of LogViewer.LogEntryParser::Parse