2017-02-22 93 views
-1

Я использую log4net, и он иногда записывает исключение из файла журнала. Теперь я хочу, чтобы вставить каждую строку журнала, который может быть более чем на 1 строку (например, исключения, в том числе StackTrace) длинные, такФайл журнала анализа по логической строке

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

разобьется исключения. Вот лог-файл выборки:

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 

Я хочу очень первая строка будет анализироваться в строке, а также все остальные остальные (в данном примере, исключение в целом).

Есть идеи, которые могут быть полезными для вас?

+0

Я хотел бы начать здесь: [просить] –

+0

@ rory.ap спасибо, я довольно хорошо. У меня просто не было смысла начинать. Спасибо, кстати, за то, что вы не указали явные причины. Может быть, вам стоит взглянуть на руководство о том, как правильно просматривать (в вашей книге) «глупые вопросы». Почему stackoverflow настолько недружелюбен? –

+0

Я остановился, потому что вы не удосужились прочитать [помощь] и [спросить], прежде чем публиковать свой вопрос. Ваш вопрос слишком широк и не показывает никаких исследований. Дело не в том, что это недружелюбно; это больше того, что люди устали от тех же самых вопросов, которые задаются снова и снова, без того, чтобы человек понимал правила. –

ответ

0

Вот что я придумал, используя Regex для разделения строк. Однако предполагается, что все записи журнала начинаются с даты в этом формате.

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

Я использовал этот текст в качестве демонстрации, и я изменил несколько дат, чтобы показать, что он будет соответствовать нескольким.

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 

И код производит следующий вывод:

===== 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

Спасибо. Я настроил log4net, чтобы начать с даты, которая позволяет вашему ответу соответствовать моим потребностям! Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^