我正在尝试为我的代码创建日志文件。但我无法将所有日志语句写入文件。
这是我的代码:
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")
}
答案 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()
}