Heim >Backend-Entwicklung >Golang >Warum kann mein Go-Code keine Protokolle in eine Datei schreiben und wie kann ich das beheben?

Warum kann mein Go-Code keine Protokolle in eine Datei schreiben und wie kann ich das beheben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 06:34:18850Durchsuche

Why Does My Go Code Fail to Write Logs to a File, and How Can I Fix It?

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!

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