go语言中动态读取日志

package main

//tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,
//通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容 ,在日志收集中可以实时的监测日志的变化,Log需要换行才可以表现
import (
	"fmt"
	"time"

	"github.com/hpcloud/tail"
)

func main() {
	fileName := "app.log"
	config := tail.Config{
		ReOpen:   true,                                 // 重新打开
		Follow:   true,                                 // 是否跟随
		Location: &tail.SeekInfo{Offset: 0, Whence: 2}, // 从文件的哪个地方开始读
		//Offset: 0 表示偏移量为0,这意味着从文件末尾开始阅读。
		//Whence: 2 表示寻找开始位置的方式。1 表示从文件的头开始读去  2 表示以相对于文件末尾的方式进行寻找
		MustExist: false, // 文件不存在不报错
		Poll:      true,  //轮询
	}
	tails, err := tail.TailFile(fileName, config)
	if err != nil {
		fmt.Println("err:", err)
		return
	}
	// 开始读取数据
	var (
		msg *tail.Line
		ok  bool
	)
	for {
		msg, ok = <-tails.Lines //遍历chan,读取日志内容
		if !ok {
			fmt.Printf("tail file close reopen,fileName:%s\n",
				tails.Filename)
			time.Sleep(time.Second)
			continue
		}
		fmt.Println("msg:", msg.Text)
	}
}
posted @ 2023-07-18 10:20  厚礼蝎  阅读(82)  评论(0编辑  收藏  举报