You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:12:34