Golang - Kopiere Exec-Ausgabe in Log

8

Ich möchte die Ausgabe eines Prozesses zeitnah in log umleiten. Ich kann es tun, wenn ich auf den folgenden Prozess warte:

%Vor%

Wenn jedoch der Prozess lange dauert oder nicht beendet wird, ist dies weniger nützlich. Ich weiß, dass ich in Echtzeit wie folgt schreiben kann:

%Vor%

Das hilft mir aber nicht wirklich, weil ich einen Dienst schreibe, der nicht in ein Terminal schreibt. Ich suche nach etwas, das mich etwas wie:

machen lässt %Vor%

log gibt keinen direkten Zugriff auf den Writer, dies ist also nicht möglich. Sicherlich bin ich nicht der Einzige bei diesem Problem, wie wird das typischerweise gemacht?

    
Rick Smith 07.08.2014, 19:48
quelle

2 Antworten

22

Sie sollten hier eine Pipe verwenden, zum Beispiel:

%Vor%

Ich habe hier nur Stdout behandelt, aber es ist möglich, Stderr gleichzeitig zu behandeln, zum Beispiel mit einer goroutine.

    
SirDarius 07.08.2014, 20:19
quelle
3

Sowohl exec.Command als auch log.Logger basieren auf io.Writer . Du hast keinen Zugang zu denen der zweiten, aber du musst nicht, weil du sie entweder nicht geändert hast und du os.Stderr benutzt hast oder du hast sie geändert und du hast io.Writer zur Hand wenn Erstellen des Loggers.

Sie müssen also nur Ihr zweites Beispiel anpassen, indem Sie das richtige io.Writer ...

verwenden

Bearbeiten

Nach einigem wenn, denke ich, dass es gut sein kann, einfach eine log.Logger in eine Struktur einzubetten, die die io.Writer Schnittstelle implementiert ...

Beispiel:

%Vor%

Und dann übergebe es an deinen exec.Command output ...

%Vor%

Sie können es sowohl für die Standardausgabe als auch für die Fehlerausgabe verwenden oder für jedes ein neues Objekt erstellen.

Bearbeiten2

Da ich diesen Trick für eines meiner nächsten Projekte verwenden werde, habe ich es in ein Paket auf github eingefügt. Fühlen Sie sich frei, Feedback usw. zu geben.

    
Elwinar 07.08.2014 20:26
quelle

Tags und Links