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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [golang]使用tail追踪文件变更

简介

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

示例代码

以下示例代码用于实时读取nginx的access.log日志文件,读取到后输出到控制台。如果nginx日志做了json格式化,还可以解析读取到的内容,对日志进行更多处理,比如日志内容写入数据库、做日志告警等,对于访问量较小的系统来说,这样就不需要消耗很多资源去搭建ELK、Loki等专门的日志监控系统。

package main
import (
  "flag"
  "fmt"
  "io"
  "os"
  "github.com/hpcloud/tail"
)
var (
  logfile = flag.String("f", "access.log", "日志文件路径")
)
func main() {
  flag.Parse()
  // 判断文件是否存在
  if _, err := os.Stat(*logfile); os.IsNotExist(err) {
    fmt.Printf("Error! %s not found\n", *logfile)
    os.Exit(1)
  }
  // 不从文件开始读, 而是从文件当前末尾开始读
  // Go 1.20推荐使用 io.SeekEnd, 老版本可能需要改为os.SEEK_END
  seek := &tail.SeekInfo{Offset: 0, Whence: io.SeekEnd}
  t, err := tail.TailFile(*logfile, tail.Config{
    Follow:   true,
    Location: seek,
  })
  if err != nil {
    fmt.Println(err)
  }
  for line := range t.Lines {
    fmt.Println(line.Text)
  }
}

参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
11月前
|
Unix Go
Golang 语言的标准库 os 包怎么操作目录和文件?
Golang 语言的标准库 os 包怎么操作目录和文件?
38 0
|
4月前
|
Go API 开发者
Golang深入浅出之-文件与目录操作:os与path/filepath包
【4月更文挑战第26天】Go语言标准库`os`和`path/filepath`提供文件读写、目录操作等功能。本文涵盖`os.Open`, `os.Create`, `os.Mkdir`, `filepath.Join`等API的使用,强调了文件关闭、路径处理、并发写入和权限问题的处理,并给出实战代码示例,帮助开发者高效、安全地操作文件与目录。注意使用`defer`关闭文件,`filepath`处理路径分隔符,以及通过同步机制解决并发写入冲突。
107 2
|
4月前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
50 0
|
4月前
|
Go
golang力扣leetcode 937.重新排列日志文件
golang力扣leetcode 937.重新排列日志文件
45 0
|
4月前
|
Go Windows
golang力扣leetcode 388.文件的最长绝对路径
golang力扣leetcode 388.文件的最长绝对路径
35 0
|
消息中间件 JSON 监控
golang读取conf文件的两种方式(ini和Viper)
golang读取conf文件的两种方式(ini和Viper)
263 0
|
Linux Go Windows
Golang-编译和Go语言文件基本机构
Go语言编译和Go语言文件基本机构
92 0
Golang:Excelize读写excel文件的Go语言库
Golang:Excelize读写excel文件的Go语言库
384 0
Golang:Excelize读写excel文件的Go语言库
|
Go Perl
Golang每日一练(leetDay0066) 有效电话号码、转置文件
Golang每日一练(leetDay0066) 有效电话号码、转置文件
84 0
|
测试技术 Go
Golang:os/io标准库读取文件
Golang:os/io标准库读取文件
108 0