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
相关产品推荐
相关产品推荐

