Maison  >  Article  >  développement back-end  >  Comment rediriger simultanément la sortie de la commande vers la console et le fichier journal dans Go ?

Comment rediriger simultanément la sortie de la commande vers la console et le fichier journal dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 22:07:301037parcourir

How to Redirect Command Output to Console and Log File Simultaneously in Go?

Redirection simultanée de la sortie de commande vers la console et le fichier journal

Pour rediriger la sortie standard et le stderr d'une commande vers la console et un fichier journal en temps réel, vous pouvez utiliser le type io.MultiWriter dans Go. Voici comment :

Dans l'extrait de code fourni, le code redirige uniquement vers la console car les champs Stdout et Stderr de la cmd sont respectivement définis sur os.Stdout et os.Stderr. Pour rediriger à la fois vers la console et un fichier journal, modifiez le code comme suit :

<code class="go">package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    // Logging capability
    f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("Error opening file: %v", err)
    }
    defer f.Close()
    mwriter := io.MultiWriter(f, os.Stdout)

    cmd := exec.Command("php", "randomcommand.php")
    cmd.Stdout = mwriter
    cmd.Stderr = mwriter

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}</code>

La variable mwriter est une instance de io.MultiWriter qui contient à la fois un fichier journal et la sortie standard. En définissant Stdout et Stderr de la commande sur ce mwriter, la sortie de la commande est écrite simultanément aux deux emplacements.

Le script randomcommand.php peut rester le même, en alternant entre l'écriture sur stdout et stderr 20 fois. Lorsque vous exécutez le programme Go, la sortie sera imprimée sur la console en temps réel et également enregistrée dans le fichier journal spécifié, en conservant l'ordre exact des écritures sur stdout et stderr.

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