我正在尝试编写一个程序,该程序将获取一个文本文件(一个日志文件),并获取其中的最后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");
}
我遇到的问题是,日期时间戳永远不会与我的成功日志样本匹配,因为这项任务在全国各地的多台计算机上运行,具有不同的时区等。
我想知道我是否以及如何编辑样本成功日志,因为当我们匹配时,匹配的代码将忽略日期/时间戳。有没有办法写日期/时间通配符?任何帮助我们都将不胜感激。谢谢
也许与相比就足够了
1-第一行必须以"已启动"开头
2-最后一行必须以"Ended"开头
3-第一行和最后一行之间的所有行必须以"成功"结束
{
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;
}