2015-08-20 10 views
5

Ich muss eine IIS-Protokolldatei analysieren. Gibt es Alternative zu LogParser, eine einfache Klasse, um eine Protokolldatei abzufragen?IIS-Protokolldatei analysieren - gibt es eine Alternative zu LogParser

Ich muss nur wissen, wie viele Anfragen ich zwischen 2 Daten erhalte. Hier

ist ein Beispiel für iis Protokolldatei:

#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

Können Sie uns zeigen die Struktur und die Beispielzeilen der IIS-Protokolle? PowerShell und Regex sehen hier wie eine gute Ad-hoc-Lösung aus. –

Antwort

5

Sie Tx (LINQ to Logs and Traces) verwenden können, können Sie es über nuget

installieren und es wie folgt verwenden:

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

Wenn die Log-Datei wird von einem anderen Prozess verwendet, können Sie W3CEnumerable.FromStream

+0

Funktioniert nicht, kompiliert nicht, kompiliert als Framework 4.5, wenn es auf Framwork 4.0 gesetzt ist (setzt sich selbst zurück, wenn es geändert wurde), und scheint kein einfacher Protokollparser zu sein. Gibt Binärdateien an c: \ bin \ debug ... BS aus. Warum benötigt ein LogParser unsicheren Code? Warum benötigt ein LogParser Plattformabhängigkeiten? Warum generiert es Binärdateien für 4.5, wenn auf 4.0 festgelegt? Warum muss 1 LogParser 6 dlls sein? Warum braucht es überhaupt Linq? BS. Großer Major-leage BS. Das einzige, was möglicherweise ein schlimmeres Beispiel für BS-Code wäre, wäre die Verwendung von Microsoft Log-Parser mit COM-Interop. –

4
verwenden

Es ist 2017 und die LogParser ist immer noch Quelle geschlossen. Darüber hinaus scheint die gesamte Instrumentierung von Cloud-Lösungen die Analyse von IIS-Protokollen überflüssig zu machen. Da ich mich aber auch mit Legacy Apps beschäftige, habe ich diesen einfachen Parser mit .NET Core geschrieben.

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

Quellcode: https://github.com/alexnolasco/32120528

+1

Sie sollten daraus ein IMHO machen –

Verwandte Themen