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

2024年 2月 6日 48.5k 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)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论