golang编写实现类似tail命令功能,获取文件追加写入的行,实际中可以读取日志文件新写入的行,然后解析日志行的内容。
即使文件清空再追加写入,获取的还是最新的部分。个人用了一些第三方tail包效果不太好,自己写的简单又实用。
file, err := os.Open(path)
if err != nil {
log.Fatalf("Open file fail:%v", err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
lineStr := strings.TrimSpace(string(line))
l3 := strings.Count(lineStr, "") - 1 // 计算""在lineStr中非重叠个数
if l3 < 5 {
file.Seek(0, os.SEEK_END)
}
if err != nil {
if err == io.EOF {
time.Sleep(1 * time.Second)
} else {
break
}
}
//超过50个字符的数据行会被处理
if len(string(line)) >= 50 {
//处理代码
}
}