Heim >Backend-Entwicklung >Golang >Warum werden meine Go-Log-Nachrichten nicht in die Datei geschrieben?

Warum werden meine Go-Log-Nachrichten nicht in die Datei geschrieben?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-10 00:46:11436Durchsuche

Why Aren't My Go Log Messages Writing to the File?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn