[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)
}
}
参考
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/17599457.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2022-08-01 [python]从环境变量和配置文件中获取配置参数