Ausführungsausgabe an Logger in Go umleiten
In Go stellt das Exec-Paket Mechanismen zum Ausführen externer Befehle bereit. Während die CombinedOutput-Methode die gesamte Ausgabe erfassen kann, sobald der Befehl abgeschlossen ist, ist sie möglicherweise nicht für lang laufende oder nicht abgeschlossene Prozesse geeignet.
Um die Ausgabe eines Befehls in Echtzeit an einen Logger umzuleiten, ist ein weiterer Schritt erforderlich Ein flexibler Ansatz ist erforderlich. Eine Technik besteht darin, die Ausgabe des Befehls über eine Pipe mit dem Logger zu verbinden.
Hier ist ein Beispiel-Codeausschnitt:
import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("yes") // Create a pipe to connect the command's stdout to the logger stdout, err := cmd.StdoutPipe() if err != nil { log.Fatalf("Failed to create stdout pipe: %v", err) } // Start the command if err := cmd.Start(); err != nil { log.Fatalf("Failed to start command: %v", err) } // Create a buffered reader to read the output line by line in := bufio.NewScanner(stdout) // Read the output and log it in real-time for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("Error reading command output: %v", err) } }
In diesem Beispiel kann der Stderr-Stream auch gleichzeitig durch Erstellen verarbeitet werden eine separate Goroutine. Durch die Weiterleitung der Befehlsausgabe an den Logger können Entwickler die Echtzeitausgabe erfassen und protokollieren, wodurch es einfacher wird, Prozesse in ihren Anwendungen zu überwachen und Fehler zu beheben.
Das obige ist der detaillierte Inhalt vonWie leite ich die Ausführungsausgabe in Go in Echtzeit an einen Logger um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!