## 簡介 藉助 `github.com/hpcloud/tail` ,可以實時追蹤文件變更,達到類似shell命令`tail -f`的效果。 ## 示例代碼 以下示例代碼用於實時讀取nginx的`access.log`日誌文件,讀取到後輸出到控制台。如果nginx日誌做了json格式化,還可以解析 ...
簡介
藉助 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