Heim > Artikel > Backend-Entwicklung > Wie kann ich die Befehlsausgabe gleichzeitig in der Konsole protokollieren und drucken?
Gleichzeitige Konsolen- und Protokollausgabe für Befehl Stdout und Stderr
Das Ziel des bereitgestellten Codes besteht darin, Befehle stdout und stderr auf der Konsole auszugeben in Echtzeit und protokollieren sie gleichzeitig in einer Datei in Konsolenreihenfolge, ohne den Befehl selbst zu ändern.
Um dies zu erreichen, können wir den Typ io.MultiWriter verwenden. So geht's:
<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() // Define a MultiWriter that includes both the log file and stdout multiWriter := io.MultiWriter(f, os.Stdout) // Set stdout and stderr of the command to the MultiWriter cmd := exec.Command("php", "randomcommand.php") cmd.Stdout = multiWriter cmd.Stderr = multiWriter if err := cmd.Run(); err != nil { log.Fatal(err) } }</code>
Indem wir multiWriter als eine Kombination aus Protokolldatei und Standardausgabe definieren, schreiben wir die Befehlsausgabe effektiv an beide Ziele gleichzeitig. cmd.Run() blockiert, bis der Befehl abgeschlossen ist, und stellt sicher, dass die Ausgabereihenfolge beibehalten wird.
Diese Lösung erfüllt alle Anforderungen:
Das obige ist der detaillierte Inhalt vonWie kann ich die Befehlsausgabe gleichzeitig in der Konsole protokollieren und drucken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!