2017-02-22 4 views
-1

Ich verwende log4net und es schreibt gelegentlich eine Ausnahme in die Protokolldatei. Jetzt möchte ich jede Protokollzeile einzufügen, die mehr als 1 Zeile sein kann (zum Beispiel Ausnahmen einschließlich Stacktrace) lang, soProtokolldatei nach Protokollzeile analysieren

foreach(var line in File.ReadAllLines(...)){} 

würden Ausnahmen brechen. Hier ist eine Beispiel-Protokolldatei:

2017-02-22 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
System.InvalidCastException: Specified cast is not valid. 
    at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
    at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
    at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
    at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
    at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 

ich die erste Zeile will in einem String analysiert wird, sowie der gesamte verbleibende Rest (in diesem Beispiel der Ausnahme im Allgemeinen).

Haben Sie gute Ideen, um loszulegen?

+0

ich hier beginnen würde: [fragen] –

+0

@ rory.ap Dank, ich bin ziemlich gut. Ich hatte einfach keinen Sinn damit anzufangen. Vielen Dank für die Abstimmung ohne Angabe von Gründen. Vielleicht sollten Sie sich die Anleitung ansehen, wie Sie (in Ihrem Buch) "dumme Fragen" richtig überprüfen können. Warum ist stackoverflow so unfreundlich? –

+0

Ich habe abgelehnt, weil Sie sich nicht die Mühe gemacht haben, [help] und [ask] zu lesen, bevor Sie Ihre Frage posten. Ihre Frage ist zu weit gefasst und zeigt keine Forschungsanstrengungen. Es ist nicht so, dass SO unfreundlich ist; Es ist vielmehr so, dass die Leute die gleichen Arten von Fragen satt haben, die immer wieder gestellt werden, ohne dass die Person die Regeln versteht. –

Antwort

0

Hier ist, was ich mit Regex kam, um die Zeilen zu teilen. Dies setzt jedoch voraus, dass alle Protokolleinträge mit einem Datum in diesem Format beginnen.

static void Main(string[] args) 
{ 
    string RegexString = @"(?=\d{4}[-]\d{2}[-]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}[,])"; 
    string Log4NetSample = Properties.Resources.Log4Net_Example; 
    List<string> ParsedLogItems = new List<string>(); 
    foreach (var Item in Regex.Split(Log4NetSample, RegexString)) 
     if (Item.Trim() != string.Empty) 
      ParsedLogItems.Add(Item); 


    foreach (var Item in ParsedLogItems) 
    { 
     Console.WriteLine(); 
     Console.WriteLine("===== New Log Item ====="); 
     Console.WriteLine(Item); 
    } 
    Console.ReadLine(); 
} 

Ich habe diesen Text als Demo verwendet und ein paar der Daten geändert, nur um zu zeigen, dass es zu mehreren passt.

2017-02-22 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
System.InvalidCastException: Specified cast is not valid. 
    at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
    at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
    at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
    at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
    at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 

2012-03-31 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
System.InvalidCastException: Specified cast is not valid. 
    at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
    at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
    at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
    at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
    at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 

2018-08-14 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
System.InvalidCastException: Specified cast is not valid. 
    at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
    at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
    at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
    at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
    at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 

Und der Code erzeugt die folgende Ausgabe:

===== New Log Item ===== 
2017-02-22 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
    System.InvalidCastException: Specified cast is not valid. 
     at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
     at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
     at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
     at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
     at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 


===== New Log Item ===== 
2012-03-31 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
    System.InvalidCastException: Specified cast is not valid. 
     at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
     at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
     at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
     at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
     at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 


===== New Log Item ===== 
2018-08-14 14:37:17,212 [Foo.Bar] INFO - This is something nice to log 
    System.InvalidCastException: Specified cast is not valid. 
     at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
     at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
     at Foo.Bar.<>c__DisplayClass282_0.<FooBar>b__0(DataRow row) in somefile.cs:line 2657 
     at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
     at Foo.Bar.<FooBar>d__282.MoveNext() in somefile.cs:line 2657 
+0

Danke. Ich habe log4net so konfiguriert, dass es mit dem Datum beginnt, damit Ihre Antwort meinen Bedürfnissen entspricht. Vielen Dank! –

Verwandte Themen