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