一尘不染

记录到golang中的文件

go

我从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 main

import (
    "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:文件描述符错误

我得到的只是错误的文件描述符错误。有什么想法我做错了吗?

谢谢克雷格


阅读 195

收藏
2020-07-02

共1个答案

一尘不染

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

您要么必须保持文件打开状态,要么将整个文件移入main。

2020-07-02