How to Write Logs to File in Go
When attempting to write to a log file using Go, several errors can occur. Despite creating a log file, the attempted methods may fail to print or append logs to it. The provided code illustrates these attempts:
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") }
To resolve this issue, the code should use os.OpenFile instead of os.Open. The correct approach is:
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")
According to the Go documentation, os.Open is intended for reading files and not suitable for setting the log output. os.OpenFile, on the other hand, allows the file to be opened for both reading and writing. By setting os.O_APPEND, the log entries will be appended to the end of the file rather than overwriting existing content.
The above is the detailed content of Why Does My Go Code Fail to Write Logs to a File, and How Can I Fix It?. For more information, please follow other related articles on the PHP Chinese website!