So schreiben Sie Protokolle in eine Datei in Go
Beim Versuch, mit Go in eine Protokolldatei zu schreiben, können mehrere Fehler auftreten. Trotz der Erstellung einer Protokolldatei können die versuchten Methoden möglicherweise keine Protokolle drucken oder daran anhängen. Der bereitgestellte Code veranschaulicht diese Versuche:
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") }
Um dieses Problem zu beheben, sollte der Code os.OpenFile anstelle von os.Open verwenden. Der richtige Ansatz ist:
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")
Laut der Go-Dokumentation ist os.Open zum Lesen von Dateien gedacht und nicht zum Einstellen der Protokollausgabe geeignet. os.OpenFile hingegen ermöglicht das Öffnen der Datei sowohl zum Lesen als auch zum Schreiben. Durch das Festlegen von os.O_APPEND werden die Protokolleinträge an das Ende der Datei angehängt, anstatt vorhandene Inhalte zu überschreiben.
Das obige ist der detaillierte Inhalt vonWarum kann mein Go-Code keine Protokolle in eine Datei schreiben und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!