这是我想出来的,用正则表达式来分割行。但是,这是假设所有日志条目都以该格式的日期开始。
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不友好,更多的是人们厌倦了一个人一遍又一遍地提出相同类型的问题,而没有人理解规则。 –