Ich möchte die Ausgabe eines Prozesses zeitnah in log
umleiten. Ich kann es tun, wenn ich auf den folgenden Prozess warte:
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?
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
...
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 ...
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.
Tags und Links go