Befehlsausgabe gleichzeitig in die Konsole und Protokolldatei schreiben
Sie möchten die Ausgabe eines Befehls sowohl an die Konsole als auch an eine Protokolldatei umleiten. Der vorhandene Code sendet Ausgaben an die Konsole, protokolliert sie jedoch nicht. Um beide Streams umzuleiten, verwenden Sie die unten beschriebene Technik.
Um Ihre Ziele zu erreichen, sollten Sie den folgenden Ansatz in Betracht ziehen:
Stdout und Stderr auf einen MultiWriter umleiten
Erstellen Sie einen MultiWriter, der die Datei- und Standardausgabe kombiniert. Weisen Sie dann, bevor Sie den Befehl ausführen, diesen MultiWriter den Stdout- und Stdderr-Streams des Befehls zu.
Beispielcode
<code class="go">package main import ( "io" "log" "os" "os/exec" ) func main() { // Open the log file for writing 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() // Create a MultiWriter that combines the log file and standard output mwriter := io.MultiWriter(f, os.Stdout) // Construct the command cmd := exec.Command("ls") // Redirect Stdout and Stderr to the MultiWriter cmd.Stdout = mwriter cmd.Stderr = mwriter // Run the command err = cmd.Run() if err != nil { panic(err) } }</code>
Dieser Code öffnet eine Protokolldatei, erstellt eine MultiWriter, legt die Streams des Befehls auf den MultiWriter fest und führt den Befehl aus. Die Ausgabe wird in Echtzeit und in der richtigen Reihenfolge sowohl an die Konsole als auch an die Protokolldatei weitergeleitet.
Das obige ist der detaillierte Inhalt vonWie schreibe ich die Befehlsausgabe gleichzeitig in die Konsole und in die Protokolldatei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!