我有一个像这样的大日志文件:
2020-03-25 13:15:41 App initialized.
2020-03-25 13:18:22.477 ERROR Exception from api blah blah blah blah: NOT FOUND
at element(bl:97) ~[classes/:na]
at blah blah blah blah(bm:997) ~[classes/:na]
at blah blah blah blah(yq:5) ~[classes/:na]
at blah blah blah blah(Native Method) ~[na:1.4.0_111]
2020-03-25 13:18:22.477 ERROR blah blah - Exception from api blah blah blah blah: STATUS MONITOR
at element(bl:97) ~[classes/:na]
at blah blah blah blah(bm:997) ~[classes/:na]
at blah blah blah blah(yq:5) ~[classes/:na]
at blah blah blah blah(Native Method) ~[na:1.4.0_111]
并且需要编写一个函数来从错误中返回时间戳和文本。
2020-03-25 13:18:22.477
作为键,和
ERROR Exception from api blah blah blah blah: NOT FOUND
at element(bl:97) ~[classes/:na]2020-03-25 13:15:41
at blah blah blah blah(bm:997) ~[classes/:na]
at blah blah blah blah(yq:5) ~[classes/:na]
at blah blah blah blah(Native Method) ~[na:1.4.0_111]
作为价值观
我正在使用 aDictionary<DateTime, string>来保存数据,并使用 Stringbuilder 来构建错误的每一行。但我无法弄清楚如何在不影响我尝试构建的数据的情况下正确循环它,因为它每行都会重置。
foreach (var line in File.ReadLines(fileName))
{
bool isTimeStamp = false;
do
{
sb = new StringBuilder();
timeStamp = new DateTime();
try
{
timeStamp = DateTime.Parse(line.Substring(0, 24));
isTimeStamp = true;
}
catch
{
sb.AppendLine(line);
break;
}
}
while (!isTimeStamp);
logs.Add(timeStamp, sb.ToString());
}
任何指针或提示将不胜感激。