【发布时间】:2022-01-26 10:59:29
【问题描述】:
我正在尝试使用 go 执行类似于 tail -f 的操作(打开文件并继续跟踪文件更改),但仅从文件末尾开始打印更改。我需要寻找文件的结尾,但我不知道该怎么做。我正在查看 io.Seeker 但还没有找到方法。
package main
import (
"fmt"
"github.com/nxadm/tail"
)
var logFile = "/var/log/syslog"
func main() {
t, err := tail.TailFile(logFile, tail.Config{
Follow: true,
// Location: // somehow indicate it's the end of the file?
})
if err != nil {
panic(err)
}
for line := range t.Lines {
fmt.Println(line.Text)
}
}
上面的代码中缺少什么跳转到文件末尾?
这是我得到上述示例的source。
【问题讨论】:
-
这能回答你的问题吗? Reading log files as they're updated in Go
-
我不太明白你的问题:如果你使用外部包来
tail -f一个文件,那么使用该包的 API 的适当功能 如果它有它. 如果没有,您基本上必须找到更好的包或自己推出另一个实现,在后一种情况下,您将不会遇到麻烦,因为*os.File寻找文件末尾 - 什么是由os打开文件的函数返回——100% 支持查找。 -
@kostix 我是 golang 的新手,所以我问这个问题是为了知道我是否误解了库,或者是否有一些实现已经跳到最后。如果您知道更好的软件包或推出自己的解决方案,那将很有帮助。
-
@rustyx 感谢您的回复,该链接上的解决方案输出了完整的日志,然后开始跟踪。我不希望这样,因为日志可能很大,我只需要在开始跟踪后获取新数据。那,或者我误解了包文档。