如何将日志写入文件

我正在尝试使用 Go 写入日志文件。


我尝试了几种方法,但都失败了。这是我尝试过的:


func TestLogging(t *testing.T) {

    if !FileExists("logfile") {

        CreateFile("logfile")

    }

    f, err := os.Open("logfile")

    if err != nil {

        t.Fatalf("error: %v", err)

    }


    // attempt #1

    log.SetOutput(io.MultiWriter(os.Stderr, f))

    log.Println("hello, logfile")


    // attempt #2

    log.SetOutput(io.Writer(f))

    log.Println("hello, logfile")


    // attempt #3

    log.SetOutput(f)

    log.Println("hello, logfile")

}


func FileExists(name string) bool {

    if _, err := os.Stat(name); err != nil {

       if os.IsNotExist(err) {

            return false

        }

    }

    return true

}


func CreateFile(name string) error {

    fo, err := os.Create(name)

    if err != nil {

        return err

    }

    defer func() {

        fo.Close()

    }()

    return nil

}

日志文件被创建,但没有任何东西被打印或附加到它。为什么?


子衿沉夜
浏览 192回答 3
3回答

慕容3067478

os.Open() 过去一定有不同的工作方式,但这对我有用:f, err := os.OpenFile("testlogfile", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)if err != nil {    log.Fatalf("error opening file: %v", err)}defer f.Close()log.SetOutput(f)log.Println("This is a test log entry")基于 Go 文档,os.Open()不能为log.SetOutput,因为它打开文件“阅读:”func Openfunc Open(name string) (file *File, err error) Open打开命名文件进行读取。如果成功,可以使用返回文件的方法进行读取;关联的文件描述符具有 mode O_RDONLY。如果有错误,它将是 类型*PathError。编辑检查defer f.Close()后移至if err != nil

天涯尽头无女友

我通常在屏幕上打印日志并写入文件。希望这可以帮助某人。f, err := os.OpenFile("/tmp/orders.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {    log.Fatalf("error opening file: %v", err)}defer f.Close()wrt := io.MultiWriter(os.Stdout, f)log.SetOutput(wrt)log.Println(" Orders API Called")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go