我有一些.log文件,想监视是否有任何数据附加到其中,以将这些数据收集到数据库中。
如何打开打开的写入文件,以及如何监视新行/更改?
谢谢。
答案 0 :(得分:0)
我编写了这小段代码,用于监视文件更改,如果检测到,请运行传递给它的函数。
func watchFileAndRun(filePath string, fn func()) error {
defer func() { r := recover(); if r != nil { logCore("ERROR","Error:watching file:", r) } }()
fn()
initialStat, err := os.Stat(filePath)
checkErr(err)
for {
stat, err := os.Stat(filePath)
checkErr(err)
if stat.Size() != initialStat.Size() || stat.ModTime() != initialStat.ModTime() {
fn()
initialStat, err = os.Stat(filePath)
checkErr(err)
}
time.Sleep(10 * time.Second)
}
return nil
}
要调用此功能,其中loadEnv
是一个函数,
go watchFileAndRun("config.json", loadEnv)
一些注意事项:
go watchFileAndRun()
将异步运行路由。 IE在后台。
checkErr是我自己的功能,您可以简单地将标准
if err != nil {fmt.printf("Something went wrong",err)}
代替。
第一行的延迟是为了防止程序在出现问题时崩溃。如果您想使此功能更具弹性,则可以将其嵌套得更深。
希望它能帮助某人。而且它比nsnotify插件小(坦率地说,我也可以使用)。