如何在 Go 中将日志写入文件
尝试使用 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") }
要解决此问题,代码应使用 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")
根据Go文档,os.Open是用于读取文件的,不适合设置日志输出。另一方面,os.OpenFile 允许打开文件进行读取和写入。通过设置 os.O_APPEND,日志条目将附加到文件末尾,而不是覆盖现有内容。
以上是为什么我的 Go 代码无法将日志写入文件,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!