使用C#检测日志文件中指定两行是否连续出现的需求
C# 检查日志文件中指定两行是否连续出现
嘿,我来帮你搞定这个日志检查的需求!下面是一个简洁高效的C#实现方案,完全匹配你想要的逻辑:
实现思路
我们可以逐行流式读取日志文件(不用一次性加载整个文件到内存,对大日志文件更友好),同时跟踪上一行的内容。当遇到第一行目标文本时,立即检查下一行是否是第二行目标文本,一旦找到连续匹配的情况就标记为成功;遍历结束后根据标记输出结果。
完整代码示例
using System; using System.IO; class LogChecker { static void Main(string[] args) { // 定义要检查的两行目标文本 string firstTargetLine = "Converting table AM014"; string secondTargetLine = "Table 'AM014' (522 records) is converted"; string logFilePath = @"A213.txt"; // 你的日志文件路径 bool isSuccess = false; string previousLine = null; // 逐行读取日志(流式处理,内存友好) foreach (string currentLine in File.ReadLines(logFilePath)) { // 检查当前行是否是第二行目标,且上一行是第一行目标 if (currentLine.Equals(secondTargetLine, StringComparison.OrdinalIgnoreCase) && previousLine?.Equals(firstTargetLine, StringComparison.OrdinalIgnoreCase) == true) { isSuccess = true; break; // 找到匹配后直接跳出循环,不用继续遍历 } // 更新上一行记录 previousLine = currentLine; } // 根据结果输出 Console.WriteLine(isSuccess ? "the file was success" : "the file was not success"); } }
关键细节说明
- 流式读取优化:用
File.ReadLines而非File.ReadAllLines,后者会把整个文件加载到内存,大日志场景下资源占用很高;前者是按需读取,性能更优。 - 大小写控制(可选):代码里用了
StringComparison.OrdinalIgnoreCase来忽略大小写匹配,如果你的日志行大小写严格一致,可以改成StringComparison.Ordinal来小幅提升性能。 - 提前终止遍历:一旦找到连续匹配的两行,直接跳出循环,避免浪费时间读取剩余内容。
- 边界情况处理:如果第一行目标出现在文件最后一行,不会触发匹配(因为后面没有第二行),符合业务逻辑。
测试场景验证
- ✅ 成功场景:日志里存在连续的
Converting table AM014和Table 'AM014' (522 records) is converted→ 输出the file was success - ❌ 失败场景:两行之间夹杂其他内容(比如
Not Found)→ 输出the file was not success - ❌ 无匹配场景:日志里没有这两行,或仅存在其中一行 → 输出
the file was not success
内容的提问来源于stack exchange,提问作者Sujan Joshi
相关产品推荐
相关产品推荐

