Heim  >  Artikel  >  Backend-Entwicklung  >  Wie leite ich die Befehlsausgabe in Go gleichzeitig an die Konsole und die Protokolldatei um?

Wie leite ich die Befehlsausgabe in Go gleichzeitig an die Konsole und die Protokolldatei um?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 22:07:30985Durchsuche

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

Befehlsausgabe gleichzeitig an die Konsole und die Protokolldatei umleiten

Um stdout und stderr eines Befehls sowohl an die Konsole als auch an eine Protokolldatei umzuleiten In Echtzeit können Sie den Typ io.MultiWriter in Go verwenden. So geht's:

Im bereitgestellten Codeausschnitt leitet der Code nur zur Konsole weiter, da die Felder „Stdout“ und „Stderr“ des cmd auf „os.Stdout“ bzw. „os.Stderr“ gesetzt sind. Um sowohl zur Konsole als auch zu einer Protokolldatei umzuleiten, ändern Sie den Code wie folgt:

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

Die mwriter-Variable ist eine Instanz von io.MultiWriter, die sowohl eine Protokolldatei als auch die Standardausgabe enthält. Durch Festlegen von Stdout und Stderr des Befehls auf diesen Mwriter wird die Ausgabe des Befehls gleichzeitig an beide Speicherorte geschrieben.

Das Skript randomcommand.php kann gleich bleiben und 20 Mal zwischen dem Schreiben auf stdout und stderr wechseln. Wenn Sie das Go-Programm ausführen, wird die Ausgabe in Echtzeit auf der Konsole ausgegeben und auch in der angegebenen Protokolldatei protokolliert, wobei die genaue Reihenfolge der Schreibvorgänge in stdout und stderr beibehalten wird.

Das obige ist der detaillierte Inhalt vonWie leite ich die Befehlsausgabe in Go gleichzeitig an die Konsole und die Protokolldatei um?. 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