2015-08-20 14 views
5

Ho bisogno di analizzare un file di registro IIS. Esiste un'alternativa a LogParser, una classe semplice per interrogare un file di registro?File di registro IIS di approfondimento: esiste un'alternativa a LogParser

Ho solo bisogno di sapere quante richieste ricevo tra 2 date.

Ecco un esempio di file di registro di 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 
+0

ci mostri la struttura e di esempio file di log di IIS? PowerShell e regex sembrano una buona soluzione ad hoc qui. –

risposta

5

È possibile utilizzare Tx (LINQ to Logs and Traces), è possibile installarlo tramite nuget

e usarlo in questo modo:

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

Se il il file di registro è utilizzato da un altro processo, è possibile utilizzare W3CEnumerable.FromStream

+0

Non funziona, non compila, compila come framework 4.5 quando è impostato su framwork 4.0 (si reimposta se modificato) e non sembra essere un semplice parser di log. Esegue i binari in c: \ bin \ debug ... BS. Perché un LogParser richiede un codice non sicuro? Perché un logparser necessita di dipendenze dalla piattaforma? Perché genera binari per 4.5 se impostato su 4.0? Perché 1 logparser deve essere 6 dll? Perché ha bisogno di Linq? BS. Big major-leage BS. L'unica cosa che potrebbe essere un peggiore esempio di codice BS sarebbe utilizzare Microsoft Log-Parser con COM-Interop. –

4

È 2017 e lo LogParser è ancora chiuso. Inoltre, tutta la strumentazione fornita dalle soluzioni cloud sembra aver bisogno di analizzare i registri IIS come un ricordo del passato. Ma poiché mi occupo anche di app legacy, ho scritto questo semplice parser 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); 
       } 
      } 
     } 
    } 
} 

Codice sorgente: https://github.com/alexnolasco/32120528

+1

Si dovrebbe fare un nocciolo da esso IMHO –

Problemi correlati