Maison >développement back-end >Golang >Pourquoi mon code Go ne parvient-il pas à écrire des journaux dans un fichier et comment puis-je y remédier ?

Pourquoi mon code Go ne parvient-il pas à écrire des journaux dans un fichier et comment puis-je y remédier ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 06:34:18858parcourir

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

Comment écrire des journaux dans un fichier dans Go

Lorsque vous tentez d'écrire dans un fichier journal à l'aide de Go, plusieurs erreurs peuvent survenir. Malgré la création d'un fichier journal, les méthodes tentées peuvent ne pas parvenir à y imprimer ou à y ajouter des journaux. Le code fourni illustre ces tentatives :

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")
}

Pour résoudre ce problème, le code doit utiliser os.OpenFile au lieu de os.Open. L'approche correcte est :

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")

Selon la documentation Go, os.Open est destiné à la lecture de fichiers et ne convient pas à la définition de la sortie du journal. os.OpenFile, quant à lui, permet d'ouvrir le fichier à la fois en lecture et en écriture. En définissant os.O_APPEND, les entrées du journal seront ajoutées à la fin du fichier plutôt que d'écraser le contenu existant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn