golang读取目录内的日志文件内容

2024年 2月 6日 11.2k 0

golang读取目录内的日志文件内容

问题内容

我正在尝试读取目录内的所有日志文件,下面的代码能够读取文件名,但不能读取其内容。

控制台输出

ds-api-doc-.log false
2023/03/21 11:27:11 open /Users/xxx/ds-api-doc.log: no such file or directory

files, err := ioutil.ReadDir("./logs/")
if err != nil {
log.Fatal(err)
}
fmt.Println(totalTicks)
for _, file := range files {
fmt.Println(file.Name(), file.IsDir())
abs, err := filepath.Abs(file.Name())

file, err := os.Open(abs)
if err != nil {
log.Fatal(err)
}
defer file.Close()

scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}

if err := scanner.Err(); err != nil {
log.Fatal(err)
}

}

登录后复制

正确答案

file.name() 仅返回该文件的基本名称文件。

filepath.abs​​() 将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs 值将缺少文件路径的 ./logs/ 段。

要解决此问题,您可以执行以下操作:

abs, err := filepath.abs(filepath.join("logs", file.name()))

登录后复制

或者,您可以使用 filepath.walkdir,它提供了fn 参数的文件路径。

err := filepath.WalkDir("./logs/", func(path string, de fs.DirEntry, err error) error) {
if err != nil {
return err
} else if de.IsDir() {
return nil
}

file, err := os.Open(path)
// ...
return nil
})

登录后复制

以上就是golang读取目录内的日志文件内容的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

如何删除WordPress中的所有评论
检查WordPress服务器磁盘使用情况的7种简便方法(查找大文件和数据)
如何更改WordPress常量FS_METHOD
如何为区块编辑器、Elementor等构建WordPress文章模板
如何彻底地删除WordPress主题及相关内容
如何使用WordPress搭建一个内网

发布评论