golang:监视(和读取)文件以供写入

时间:2019-04-25 10:34:27

标签: file go

我有一些.log文件,想监视是否有任何数据附加到其中,以将这些数据收集到数据库中。
如何打开打开的写入文件,以及如何监视新行/更改?
谢谢。

1 个答案:

答案 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插件小(坦率地说,我也可以使用)。