解析IIS日志文件 - 是否有LogParser的替代方案

时间:2015-08-20 14:08:37

标签: c# parsing iis-logs tx

我需要解析IIS日志文件。是否有替代LogParser ,这是一个查询日志文件的简单类?

我只需要知道在两个日期之间收到了多少请求。

以下是iis日志文件的示例:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2014-08-26 12:20:57
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2014-08-26 12:20:57 W3SVC1 QXXXSXXXX 172.25.161.53 POST /XXXX/XXX/XXXX/XXXXX/1.0/XXXX/XXXXXXXX/xxxxxx.svc - 443 - 999.99.999.999 HTTP/1.1 - - - xxxx.xxxx.xxx.xxx.xxxx.xxxx.xxx.com 200 0 0 4302 5562 1560

4 个答案:

答案 0 :(得分:9)

您可以使用Tx (LINQ to Logs and Traces),可以通过nuget

进行安装

并像这样使用它:

W3CEnumerable.FromStream

如果其他进程使用了​​日志文件,则可以使用textbox1.Text == textbox2.Text

答案 1 :(得分:7)

2017年,LogParser仍然是封闭的来源。此外,云解决方案提供的所有工具似乎都需要解析IIS日志成为过去。但由于我还在处理遗留应用程序,因此我使用.NET核心编写了这个简单的解析器。

using System;
using System.IO;
using W3CParser.Extensions;
using W3CParser.Instrumentation;
using W3CParser.Parser;

namespace W3CParser
{
    class Program
    {
        static void Main(string[] args)
        {            
            var reader = new W3CReader(File.OpenText(args.Length > 0 ? args[0] : "Data/foobar.log"));

            using (new ConsoleAutoStopWatch())
            {
                foreach (var @event in reader.Read())
                {
                    Console.WriteLine("{0} ({1}):{2}/{3} {4} (bytes sent)",
                                      @event.Status.ToString().Red().Bold(),
                                      @event.ToLocalTime(),
                                      @event.UriStem.Green(),
                                      @event.UriQuery,
                                      @event.BytesSent);
                }
            }
        }
    }
}

源代码:https://github.com/alexnolasco/32120528

答案 2 :(得分:1)

您可以使用IISLogParser并通过nuget进行安装,它支持大文件(> 1Gb)

    List<IISLogEvent> logs = new List<IISLogEvent>();
    using (ParserEngine parser = new ParserEngine([filepath]))
    {
        while (parser.MissingRecords)
        {
            logs = parser.ParseLog().ToList();
        }
    }

答案 3 :(得分:0)

如果您要处理大量和/或IIS日志文件分散的位置,那么SpectX是一个方便的工具,因为您不必提取日志并且可以直接在多个日志上运行查询原始文件。每个内核的平均处理速度-350MB /秒。

它不是开放源代码,而是功能全面的30-day trial is free

教程: Parsing IIS logsAnalyzing IIS logs - 20 sample queries

要过滤时间段,请按日期对日志进行排序并过滤所需的时间段,例如:

    | sort(date_time desc)
    | filter(date_time > T('2019-11-01 08:48:20.000 +0200')) 
    | filter(date_time < T('2019-11-05 11:48:20.000 +0200'));