Ficheiro de registo de processamento IIS-existe uma alternativa ao LogParser

Preciso de analisar um ficheiro de Registo IIS. Existe alguma alternativa ao LogParser , Uma classe simples para consultar um ficheiro de Registo ?

Só preciso de saber quantos pedidos recebo entre duas datas.

Aqui está um exemplo do ficheiro de Registo 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
Author: Anas, 2015-08-20

4 answers

Pode usar Tx (LINQ para registos e Traces), pode instalá-lo via nuget

E usa-o assim:

var iisLog = W3CEnumerable.FromFile(pathToLog);
int nbOfLogsForLastHour = iisLog.Where(x => x.dateTime > DateTime.Now.AddHours(-1)).Count();

Se o ficheiro de Registo for usado por outro processo, pode usar W3CEnumerable.FromStream

 10
Author: Anas, 2015-08-21 01:06:49

Estamos em 2017 e o LogParser ainda está fechado. Além disso, toda a instrumentação fornecida pela cloud solutions parece estar fazendo com que a necessidade de analisar o IIS logs seja uma coisa do passado. Mas como eu também estou lidando com aplicativos legacy, eu escrevi este simples analisador usando.net core.

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);
                }
            }
        }
    }
}

Código-Fonte: https://github.com/alexnolasco/32120528

 9
Author: Alex Nolasco, 2017-07-25 15:28:31

Você pode usar O IISLogParser , e instalá-lo através do nuget, ele tem suporte para ficheiros grandes (>1Gb)

List<IISLogEvent> logs = new List<IISLogEvent>();
using (ParserEngine parser = new ParserEngine([filepath]))
{
    while (parser.MissingRecords)
    {
        logs = parser.ParseLog().ToList();
    }
}
 3
Author: Kabindas, 2020-06-25 21:47:04

Se está a lidar com grandes volumes e/ou locais dispersos de ficheiros de Registo IIS, então O SpectX é uma ferramenta útil para isto porque não tem de ingerir os registos e pode executar consultas directamente em vários ficheiros raw. Velocidade de processamento Avg por núcleo-350MB / S.

Não é de código aberto, mas a funcionalidade completa 30 dias de teste é livre.

Tutoriais: a analisar os registos do IIS . analisando os registos IIS-20 consultas de amostras .

Para filtrar a período de tempo, ordenar os registos por data e filtrar o período de que necessita, p. ex.:

    | 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'));
 0
Author: lii5a, 2019-11-11 09:15:57