无法将所有日志语句写入文件

时间:2017-02-02 12:07:39

标签: go

我正在尝试为我的代码创建日志文件。但我无法将所有日志语句写入文件。

这是我的代码:

func MyLogger() {
    f, err := os.OpenFile("C:\\Project\\GoLang\\src\\Logs\\LogOutput\\TestLog.log", 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")
}

1 个答案:

答案 0 :(得分:4)

问题是您在打开日志文件后立即关闭日志文件。

您正在拨打log.SetOutput(logFile),但您也可以致电defer logFile.Close()。函数MyLogger()退出后立即执行延迟 - 所以在您有机会实际记录任何内容之前。

如果您的记录器将在整个程序期间运行,您可能根本不需要关闭它,并在程序退出时让它自动关闭。

如果你确实需要在程序退出之前关闭它,你需要想出一些方法来存储MyLogger()方法之外的文件句柄(可能在全局变量中,尽管有是其他选项),然后在适当的时候关闭它。

一个完整的例子:

package Controllers

import (
    "log"
    "os"
    "io"
)

var logCloser io.Closer

func MyLogger() {
    logFile, err := os.OpenFile("C:/Project/GoLang/src/Logs/log.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
    if err != nil {
        panic(err)
    }
    logCloser = logFile
    log.SetOutput(logFile)
}

func CloseMyLogger() {
    logCloser.Close()
}