C#使用正则表达式读取log4net日志文件

2014-02-11 14:32:00,341 [6] INFO  LOGGER [(null)] - HELLO WORLD.
2014-02-11 14:32:04,431 [1] INFO  LOGGER [(null)] - LOG TEXT.
2014-02-11 14:32:04,433 [1] INFO  LOGGER [(null)] - THIS
 IS
 A
 VERY
 LONG
 TEXT.
2014-02-11 14:32:37,197 [1] INFO  LOGGER [(null)] - BYE.

log4net可以输出形如上面的文本日志。

可以使用下面的方法进行读取:

DataTable dt = new DataTable();
dt.Columns.AddRange(new[] 
{ 
	new DataColumn("TIME"),
	new DataColumn("THREAD"),
	new DataColumn("PRIORITY"),
	new DataColumn("LOGGER"),
	new DataColumn("MESSAGE"),
});

//读取文件
string s = "";
using(FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
	using(StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default))
	{
		s = sr.ReadToEnd();
	}                
}

//正则表达式匹配,注意RegexOptions.RightToLeft
var matches = Regex.Matches(s, @"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}) \[(\d+)] ([A-Z, ]{5}) ([A-Z,a-z,0-9, ]+).*?- ([\s\S]*?)", RegexOptions.RightToLeft);

foreach (Match m in matches)
{
	var time = m.Groups[1].Value;
	var thread = m.Groups[2].Value;
	var priority = m.Groups[3].Value;
	var logger = m.Groups[4].Value;
	var msg = m.Groups[5].Value;

	var dr = dt.NewRow();
	dr.ItemArray = new[] { time, thread, priority, logger, msg };
	dt.Rows.InsertAt(dr, 0);
}


你可能感兴趣的:(C#/.NET)