C# 实现 Tail -f 命令






4.83/5 (5投票s)
Tailf 是一个小型实用工具,模仿了 Unix/Linux 中的 tail -f 命令。 实际上,给定一个测试文件,它会显示最新的 (n) 行,并继续转储任何后续的文件写入。 当我们需要监视文本日志文件时,这非常有用。 该实用工具尤其设计用于处理 log4net[^] 滚动文件追加器,避免锁定文件,从而使滚动不会出现问题。 核心部分是一个类(Tail),可以可能在其他应用程序中使用,以监视文件写入。 将代码用作实用工具类就像实例化主类一样简单。
Tail tail = new Tail("filename", nOfLines);
tail.LineFilter = "filter expr" //can be null or empty;
tail.Changed += new EventHandler(tail_Changed);
tail.Run();
事件处理程序接收添加的文本部分,或者在启动时,接收目标文件的结尾行。 在启动阶段,将为每一行尾部行触发一个事件。 处理程序的示例如下:void tail_Changed(object sender, Tail.TailEventArgs e)
{
Console.Write(e.Line);
}
可以指定一个可选的过滤器,以 .NET 正则表达式[^] 的形式编写,以便过滤包含至少与该表达式的一个匹配项的所有行。 使用该实用工具更加容易,因为它是一个简单的命令行:tailf mylog.txt 会持续将 mylog.txt 的内容转储到控制台,只要有新行写入其中。 tailf -n:15 mylog.txt 会持续将 mylog.txt 的内容转储到控制台,只要有新行写入其中。 在启动时,会转储最后 15 行。 tailf mylog.txt -f:ERROR 会持续将 mylog.txt 的内容转储到控制台,只要有新行写入其中。 仅显示包含“ERROR”的行。 tailf mylog.txt -f:"ERROR|WARN" 会持续将 mylog.txt 的内容转储到控制台,只要有新行写入其中。 仅显示包含“ERROR”或“WARN”的行;由于 | 是命令 shell 中的特殊字符,因此需要双引号。