为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中记录到文件

在 golang 中记录到文件

Go
摇曳的蔷薇 2021-11-08 15:53:22
我从 golang 开始,当我开始构建我的应用程序时,我想从一开始就添加日志记录,这就是我遇到问题的地方。如果我打开一个文件并使用标准日志库,我就可以写入文件。像这样。    package main   import (        "os"        "fmt"        "log"    )    func main() {        // open a file        f, err := os.OpenFile("test.log", os.O_APPEND | os.O_CREATE | os.O_RDWR, 0666)        if err != nil {            fmt.Printf("error opening file: %v", err)        }        // don't forget to close it        defer f.Close()        // assign it to the standard logger        log.SetOutput(f)        log.Output(1, "this is an event")    }我将获得带有日志行的 test.log。但是,如果我尝试调整它以支持 logrus https://github.com/Sirupsen/logrus这样    package mainimport (    "os"    "fmt"    log "github.com/Sirupsen/logrus")func init() {    // open a file    f, err := os.OpenFile("testlogrus.log", os.O_APPEND | os.O_CREATE | os.O_RDWR, 0666)    if err != nil {        fmt.Printf("error opening file: %v", err)    }    // don't forget to close it    defer f.Close()    // Log as JSON instead of the default ASCII formatter.    log.SetFormatter(&log.JSONFormatter{})    // Output to stderr instead of stdout, could also be a file.    log.SetOutput(f)    // Only log the warning severity or above.    log.SetLevel(log.DebugLevel)}func main() {    log.WithFields(log.Fields{        "Animal": "Logrus",    }).Info("A logrus appears")}我将看到的只是错误。无法写入日志,写入 testlogrus.log:文件描述符错误我得到的只是错误的文件描述符错误。任何想法我做错了什么?
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

由于您在init函数中设置了文件并且您拥有defer f.Close(),因此文件在init返回后会关闭。

您要么必须保持文件打开状态,要么将整个文件移动到主文件中。


查看完整回答
反对 回复 2021-11-08
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

如果您使用 logrus,您应该更好地使用文档推荐的钩子。

有关示例,请参见:https : //github.com/rifflock/lfshook

在我看来,将整个事情移到主要内容通常不是一个好主意,相反,我们需要分段良好的代码。


查看完整回答
反对 回复 2021-11-08
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

在 Linux 开发中,您可以写入 stdout 并通过管道传输到文件。在生产中写入系统日志。两种方式您都不需要自己处理文件。


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信