在尝试使用 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") }
然而,尽管创建了日志文件(logfile),但没有向其中写入任何信息。
解决方案涉及使用os.OpenFile 而不是 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")
此方法利用带有以下标志的 os.OpenFile:
通过使用os.OpenFile,您可以指定必要的文件访问权限,以确保日志成功写入文件。
以上是如何在 Go 中成功将日志写入文件?的详细内容。更多信息请关注PHP中文网其他相关文章!