Heim  >  Artikel  >  Backend-Entwicklung  >  Wie leite ich externe Prozessausgaben in Echtzeit an Protokolle in Golang um?

Wie leite ich externe Prozessausgaben in Echtzeit an Protokolle in Golang um?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 13:38:03787Durchsuche

How Do I Redirect External Process Output to Logs in Golang in Real Time?

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:

  1. Pipe-Erstellung: Erstellen Sie eine Pipe zum Lesen des Stdout des Prozesses mit StdoutPipe().
  2. Prozessausführung:Starten Sie den Prozess mit der eingerichteten Pipe.
  3. Ausgabeablesung:Lesen Sie die Ausgabe der Stdout-Pipe Zeile für Zeile mit einem gepufferten Scanner.
  4. Protokollierung: Schreiben Sie jede Zeile mit log.Printf() in das gewünschte Protokoll.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn