当前位置: 首页 > 面试题库 >

在Go中更新日志文件时读取它们

那利
2023-03-14
问题内容

我正在尝试解析一些日志文件,因为它们是用Go语言编写的,但是我不确定在不进行检查更改的情况下一次又一次地重新读取该文件的情况下,如何实现这一点。

我希望能够读到EOF,等到下一行写完后再读到EOF,依此类推。感觉有点像tail -f


问题答案:

我已经编写了一个Go程序包github.com/hpcloud/tail来完成此任务。

t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true})
for line := range t.Lines {
    fmt.Println(line.Text)
}

引用kostix的答案:

在现实生活中,文件可能会被截断,替换或重命名(因为logrotate之类的工具应该这样做)。

如果文件被截断,它将自动重新打开。为了支持重新打开重命名的文件(由于logrotate等),可以设置Config.ReOpen,即:

t, err := tail.TailFile("/var/log/nginx.log", tail.Config{
    Follow: true,
    ReOpen: true})
for line := range t.Lines {
    fmt.Println(line.Text)
}

Config.ReOpen类似于tail -F(大写F):

 -F      The -F option implies the -f option, but tail will also check to see if the file being followed has been
         renamed or rotated.  The file is closed and reopened when tail detects that the filename being read from
         has a new inode number.  The -F option is ignored if reading from standard input rather than a file.


 类似资料:
  • 问题内容: 我有诸如ffmpeg和gstreamer之类的外部程序在后台运行并写入日志文件。我想用我的Flask应用程序显示此日志的内容,以便用户可以像在终端中那样观看日志更新。 我试图指向日志文件,但是无法显示数据,或者浏览器告诉我我需要一个插件。 如何在HTML页面中嵌入和更新日志文件? 问题答案: 使用Flask视图可以永久不断地从文件中读取数据并流式传输响应。使用JavaScript从流中

  • 问题内容: 如何在go程序中读取xz文件?当我尝试使用阅读它们时,出现错误。 问题答案: 您有3个选择。 尝试另一个库,也许是使用cgo的库。我在这里看到两个。 直接使用cgo /创建自己的lib。 使用xz可执行文件。 选项三比听起来容易。这是我会用的: 此处可运行的代码:http : //play.golang.org/p/SrgZiKdv9a

  • 更新时间 更新内容 2019.04.17 新增/ocr/car_plate 接口 2019.01.24 新增/ocr/business_license 接口 2018.12.05 新增/ocr/driving_license_v2 接口 2018.09.07 新增 /data/check_multi_applications接口 2018.8.24 接口输入示例中添加Python示例 2018.0

  • 读写文件是很多程序的基本任务,下面我们看看Go里面的文件读取。 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 读取文件的函数调用大多数都需要检查错误, // 使用下面这个错误检查方法可以方便一点 func check(e error) { if e != nil {

  • 问题内容: 我在Go中找不到功能。我可以弄清楚如何快速编写一个,但是我只是想知道我是否在这里忽略了一些东西。如何逐行读取文件? 问题答案: _注意: 可接受的答案在早期的Go版本中是正确的。 包中有ReadLine函数。 请注意,如果该行不适合读取缓冲区,则该函数将返回不完整的行。如果要始终通过单次调用函数来读取程序中的整行,则需要将该函数封装到自己的函数中,该函数在for循环中进行调用。 之所以

  • 项目所有的主要更新都将记录在本文档中。 [Unreleased] 优化拷贝 npm 模块链路 支持 createRef renderProps 支持 支持 forwardRef useImperativeHandle 支持基于 Kbone 的运行时方案 2019-12-19 Added 支持 withRouter Fixed 修复 JSX 参数绑定的问题 Changed 用户在 tabBar.it