我从 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
返回后会关闭。
您要么必须保持文件打开状态,要么将整个文件移动到主文件中。
牛魔王的故事
TA贡献1830条经验 获得超3个赞
如果您使用 logrus,您应该更好地使用文档推荐的钩子。
有关示例,请参见:https : //github.com/rifflock/lfshook。
在我看来,将整个事情移到主要内容通常不是一个好主意,相反,我们需要分段良好的代码。
- 3 回答
- 0 关注
- 308 浏览
添加回答
举报
0/150
提交
取消