从Node收听ConsoleTraceListener日志

时间:2017-02-27 10:07:03

标签: c# node.js stdin spawn tracelistener

我编写了示例应用程序,将日志打印到ConsoleTraceListener

根据MSDNConsoleTraceListener应重定向到标准输出。我spawn此节点来自节点并尝试收听stdout,但无法获取相关信息。

知道怎么解决这个问题吗?我想将TraceListener流式传输到节点

C#:

Trace.Listeners.Add(new ConsoleTraceListener(true));
Trace.AutoFlush = true;
Console.WriteLine("This comes out");
Trace.WriteLine("oops");
Trace.TraceInformation("Getting lost");
Thread.Sleep(5000);
Console.WriteLine("Stopping comes out");

节点:

let proc = ps.spawn("sample.exe");
proc.stdout.on('data', (c) => {
    console.log(c.toString());
});

proc.stderr.on('err', (c) => {
    console.log(c.toString());
});

1 个答案:

答案 0 :(得分:1)

首先,由于您传递给ConsoleTraceListener的参数,您重定向到stderr而不是stdout:

Trace.Listeners.Add(new ConsoleTraceListener(useErrorStream: true));// < note true here

要重定向到stdout - 将其更改为false:

Trace.Listeners.Add(new ConsoleTraceListener(useErrorStream: false));

然后您将在node.js应用中看到输出。 如果您想查看stderr,请更改您的node.js应用程序:

proc.stderr.on('data', (c) => {
    console.log(c.toString());
});

然后,即使使用原始的.NET应用程序写入stderr,您也会看到输出。

如果上述方法无效 - 请检查是否定义了TRACE编译时常量(项目属性&gt;复选框&#34;定义TRACE常量&#34;)。