Prozessausgabe an Protokolle in Golang umleiten
Bei der Ausführung externer Prozesse in Golang kann es wertvoll sein, deren Ausgabe zeitnah zu erfassen und zu protokollieren. Während das Warten auf den Abschluss des Prozesses und die Verwendung von CombinedOutput() eine Protokollierung ermöglicht, ist dies für lang laufende oder nicht abgeschlossene Prozesse unpraktisch.
Alternativ reicht das Schreiben in Stdout in Echtzeit für Dienste nicht aus, an die keine Ausgabe erfolgt ein Terminal. Eine Lösung besteht darin, Pipes für eine effiziente Ausgabeumleitung zu nutzen.
Pipes zur Umleitung nutzen
Eine Pipe stellt eine Verbindung zwischen Prozessen her und ermöglicht so die Datenübertragung. Um die Prozessausgabe in Protokolle umzuleiten, führen Sie die folgenden Schritte aus:
Das Hinzufügen eines Handlers für Stderr kann durch Erstellen einer Goroutine für die gleichzeitige Verarbeitung beider Ausgabekanäle erreicht werden .
Beispielimplementierung:
Betrachten Sie den folgenden Codeausschnitt, der Pipes für die Ausgabeumleitung verwendet:
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } if err := cmd.Start(); err != nil { return 0, err } in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
Durch die Verwendung dieses Ansatzes können Sie effektiv Erfassen und protokollieren Sie die Ausgabe externer Prozesse zeitnah und stellen Sie sicher, dass wertvolle Informationen für Debugging und Analyse verfügbar sind.
Das obige ist der detaillierte Inhalt vonWie leite ich externe Prozessausgaben in Echtzeit an Protokolle in Golang um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!