コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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;
        }