go语言并发实战——日志收集系统 利用tail包实现对日志文件的实时监控
package main
import (
"fmt"
"github.com/hpcloud/tail"
"os"
"os/signal"
"syscall"
)
func main() {
// 创建一个tail.Config结构体实例,并设置配置
cfg := tail.Config{
ReOpen: true, // 当文件被删除或重命名后,自动尝试重新打开
Follow: true, // 实时监控文件新增内容
Location: &tail.SeekInfo{Offset: 0, Whence: os.SEEK_END}, // 从文件末尾开始读取
MustExist: false, // 如果文件不存在,不会返回错误
}
// 创建tail.Tail实例,并开始监控日志文件
t, err := tail.TailFile("/path/to/your/logfile.log", cfg)
if err != nil {
fmt.Println("Error:", err)
return
}
// 监听系统信号,如果接收到SIGINT或SIGTERM,则退出程序
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
t.Stop()
}()
// 循环读取文件内容
for line := range t.Lines {
fmt.Println(line.Text)
}
fmt.Println("Exiting...")
}
这段代码使用了tail
包来实现对日志文件的实时监控。它首先配置了tail.Config
,然后使用tail.TailFile
函数来创建一个监控实例。接着,它设置了一个系统信号监听,以便在程序接收到SIGINT
或SIGTERM
信号时优雅地退出程序。最后,它在一个goroutine中循环读取文件的新内容,并将每行输出到控制台。
评论已关闭