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!