Protokollmeldungen in eine Datei in Go schreiben
In Go kann das Protokollieren in eine Datei eine unkomplizierte Aufgabe sein. Bei bestimmten Ansätzen können jedoch Fehler auftreten, sodass Sie sich fragen, warum Ihre Protokollmeldungen nicht in die Datei geschrieben werden.
Fehlgeschlagene Ansätze
Der bereitgestellte Code zeigt drei erfolglose Versuche beim Protokollieren in einer Datei:
func TestLogging(t *testing.T) { // ... // 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") }
Diese Versuche schlagen fehl, weil os.Open(), das zum Öffnen der Protokolldatei verwendet wird, geöffnet wird die Datei nur zum Lesen, was mit dem von log.SetOutput() erforderlichen Schreiben nicht kompatibel ist.
Lösung
Um sich erfolgreich in einer Datei anzumelden, sollten Sie os verwenden .OpenFile() stattdessen:
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() öffnet die Datei mit Lese-, Schreib-, Erstellungs- und Anhängeberechtigungen, sodass Sie erfolgreich Protokollmeldungen schreiben können zur Datei. Denken Sie daran, die Datei nach Abschluss der Protokollierung mit defer f.Close() zu schließen.
Das obige ist der detaillierte Inhalt vonWarum werden meine Go-Log-Nachrichten nicht in die Datei geschrieben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!