這是我想出來的,用正則表達式來分割行。但是,這是假設所有日誌條目都以該格式的日期開始。
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
我就從這裏開始:[問] –
@ rory.ap感謝,我很精細。我剛開始並沒有任何意見。感謝您在不明確原因的情況下進行降低投票的方式。也許你應該看一看關於如何正確回顧(在你的書中)「愚蠢問題」的指南。爲什麼stackoverflow如此不友好? –
我低估了,因爲在發佈您的問題之前,您沒有閱讀[幫助]和[問]。你的問題太寬泛,並沒有顯示研究工作。並不是說SO不友好,更多的是人們厭倦了一個人一遍又一遍地提出相同類型的問題,而沒有人理解規則。 –