我正在尝试编写一个程序,它将获取一个文本文件(一个日志文件)并获取它的最后10行以匹配特定的日志条目,如果它不匹配则抛出错误。问题是这些日志条目是按日期时间标记的,具体取决于特定任务的运行时间。
我想要匹配的条目示例是
Started MM/DD/YY HH:MM:SS
Download1 - success
Download2 - success
Download3 - success
Download4 - success
Download5 - success
Download6 - success
Download7 - success
Download8 - success
Ended MM/DD/YY HH:MM:SS
由于这应该是我们运行此程序时日志文件中的最新条目,因此我使用以下代码将示例成功日志与指定日志文件中的内容进行匹配(为简单起见略微编辑):
if (logfile.EndsWith("Started MM/DD/YY HH:MM:SS
Download1 - success
Download2 - success
Download3 - success
Download4 - success
Download5 - success
Download6 - success
Download7 - success
Download8 - success
Ended MM/DD/YY HH:MM:SS")
{
Console.WriteLine("Program Was Successful");
}
else
{
Console.WriteLine("Error");
}
我遇到的问题是日期时间戳永远不会与我的示例成功日志匹配,因为此任务在全国多台计算机上运行,具有不同的时区等。
我想知道是否以及如何编辑示例成功日志,以便在匹配匹配代码时忽略日期/时间戳。有没有办法写日期/时间通配符?任何帮助总是受到赞赏。谢谢!
答案 0 :(得分:0)
可能只是与之比较:
1 - 第一行必须以" Started"
开头2 - 最后一行必须以"结束"
开头3 - 第一行和最后一行之间的所有行必须以" success"
结束 {
var text = @"Started MM/DD/YY HH:MM:SS
Download1 - success
Download2 - success
Download3 - success
Download4 - success
Download5 - success
Download6 - success
Download7 - success
Download8 - success
Ended MM/DD/YY HH:MM:SS";
var result = IsValid(text, 8); // you can set the number of "Download.." strings
}
...
private static bool IsValid(string text, int countOfDownloads)
{
string[] lines = text.Split(new[] {Environment.NewLine}, StringSplitOptions.None);
return IsValid(lines, countOfDownloads);
}
private static bool IsValid(string[] lines, int countOfDownloads)
{
if (lines.Length != countOfDownloads + 2)
return false;
if (!lines[0].StartsWith("Started"))
return false;
if (!lines[lines.Length - 1].StartsWith("Ended"))
return false;
for (var i = 1; i <= countOfDownloads; i++)
{
if (!lines[i].Trim().EndsWith("success"))
return false;
}
return true;
}