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

C#如何读取日志文件倒数第二行(适配末行为空的场景)

解决方案

核心实现代码

using System.Linq;
using System.IO;

// 定位目标行
var targetLine = File.ReadLines("SomeFile.log")
    .Reverse()
    .SkipWhile(string.IsNullOrWhiteSpace) // 自动过滤末尾所有空白行,无需单独判断末行是否为空
    .Skip(1) // 跳过最后一条有效日志行,取它的上一行
    .FirstOrDefault();

if (!string.IsNullOrEmpty(targetLine))
{
    // 按示例格式直接截取前23位即可得到标准时间戳
    string timestamp = targetLine.Substring(0, 23);
    // 后续可按需处理timestamp
}

逻辑说明

  • 调用Reverse()将行序列倒转后,原文件的末尾行会排在序列最前端,配合SkipWhile直接过滤所有末尾空白行,兼容末行空、连续多行为空的场景
  • 过滤空白行后跳过1行,得到的就是需求要求的目标行,完全匹配示例场景的取值逻辑
  • 内置判空逻辑可以避免日志行数不足时的报错问题

大日志优化方案(可选)

如果处理GB级超大日志,不想把全量行加载到内存,可以直接从文件末尾逐字节读取查找换行符定位目标行,常规日志场景下上面的LINQ写法已经足够简洁高效。

内容的提问来源于stack exchange,提问作者NoBullMan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:57:02