2016-10-02 5 views
0

Ich habe eine Elixir-App, in der ich einen externen Prozess unter Verwendung Porcelain spawn. Der erzeugte Prozess 'STDOUT steht mir als Textfluss als proc.out (in Form von #Function<59.89908360/2 in Stream.unfold/2>) zur Verfügung.Einen Stream des Textes protokollieren

Ich bin in der Lage, den Inhalt des Streams Zeile für Zeile mit IO.stream/2 zu drucken, aber ich möchte es explizit mit Logger.info tun. Dies ist, was es sieht derzeit wie:

proc = Porcelain.spawn("node", ["/path/to/node/server.js"], [out: :stream]) 
stream = proc.out 
Enum.into(stream, IO.stream(:stdio, :line)) 

habe ich noch versucht:

  • [out: Logger.info]
  • Enum.into(proc.out, Logger.info)

Antwort

0

Enum.map/2 und Enum.each/2 sowohl mein Problem zu lösen, indem sie über den Bach Iterieren Linien und Anwendung Logger.info. Aber wie @dogbert pointed out, each könnte schneller und besser geeignet, in diesem Fall:

Enum.each(stream, &Logger.info/1) 
+1

'Enum.each' könnte etwas schneller sein und mehr idiomatische da Sie nicht den Rückgabewert von' Logger.info nicht benutzen wollen/1'. – Dogbert

+0

Danke @dogbert. Ich werde das benutzen. – Sheharyar

Verwandte Themen