当tail的文件中有信息变动时,就会tail到变动的地方。
例子:
func main() {
//filename := "E:/golang/go_work/src/go_dev/day11/tail/my.log"
filename := "C:\\Users\\TCY\\Desktop\\logs\\my.log"
tails, err := tail.TailFile(filename, tail.Config{
ReOpen: true, // 文件被移除或被打包,需要重新打开,基础库会检测,如果文件有改变,会重新打开
Follow: true, // 实时跟踪
//Location: &tail.SeekInfo{Offset: 0, Whence: 2}, // 如果程序出现异常,保存上次读取的位置,避免重新读取
MustExist: false, //flase日志文件不存在也监控
Poll: true, //不断的去查询
})
if err != nil {
fmt.Println("tail file err:", err)
return
}
var msg *tail.Line
var ok bool
for true {
msg, ok = <-tails.Lines //chan
if !ok {
// ok 是判断管道是否被关闭,如果关闭就是文件被重置了,需要重新读取新的管道
fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
time.Sleep(100 * time.Millisecond)
continue
}
fmt.Println("msg:", msg)
}
}
1、当没有找到要tail的文件时:会等待出现
2018/07/20 21:23:18 Waiting for C:\Users\TCY\Desktop\logs\my.log to appear...
2、接下来在该文件中新建该文件,输出文件的信息
msg: &{# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2018-06-18 19:22:49.1946892 +0800 CST <nil>}
msg: &{# 222222222222222222222222222222222222222 2018-06-18 19:22:49.1946892 +0800 CST <nil>}
msg: &{# 333333333333333333333333333333333333333. 2018-06-18 19:22:49.2086992 +0800 CST <nil>}
msg: &{# ttttttttttttttttttttttttttttt 2018-06-18 19:22:49.2102004 +0800 CST <nil>}