[golang]使用tail追踪文件变更

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

简介

借助 github.com/hpcloud/tail ,可以实时追踪文件变更,达到类似shell命令tail -f的效果。
示例代码

以下示例代码用于实时读取nginx的access.log日志文件,读取到后输出到控制台。如果nginx日志做了json格式化,还可以解析读取到的内容,对日志进行更多处理,比如日志内容写入数据库、做日志告警等,对于访问量较小的系统来说,这样就不需要消耗很多资源去搭建ELK、Loki等专门的日志监控系统。
  1. package main
  2. import (
  3.         "flag"
  4.         "fmt"
  5.         "io"
  6.         "os"
  7.         "github.com/hpcloud/tail"
  8. )
  9. var (
  10.         logfile = flag.String("f", "access.log", "日志文件路径")
  11. )
  12. func main() {
  13.         flag.Parse()
  14.         // 判断文件是否存在
  15.         if _, err := os.Stat(*logfile); os.IsNotExist(err) {
  16.                 fmt.Printf("Error! %s not found\n", *logfile)
  17.                 os.Exit(1)
  18.         }
  19.         // 不从文件开始读, 而是从文件当前末尾开始读
  20.         // Go 1.20推荐使用 io.SeekEnd, 老版本可能需要改为os.SEEK_END
  21.         seek := &tail.SeekInfo{Offset: 0, Whence: io.SeekEnd}
  22.         t, err := tail.TailFile(*logfile, tail.Config{
  23.                 Follow:   true,
  24.                 Location: seek,
  25.         })
  26.         if err != nil {
  27.                 fmt.Println(err)
  28.         }
  29.         for line := range t.Lines {
  30.                 fmt.Println(line.Text)
  31.         }
  32. }
复制代码
参考


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表