从 Node 监听 Co​​nsoleTraceListener 日志

Listening to ConsoleTraceListener logs from Node

我已经编写了将日志打印到 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());
});

首先,由于传递给 ConsoleTraceListener:

的参数,您重定向到 stderr,而不是 stdout
Trace.Listeners.Add(new ConsoleTraceListener(useErrorStream: true));// < note true here

要重定向到标准输出 - 将其更改为 false:

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

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

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

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

如果上述方法没有帮助 - 检查您是否定义了 TRACE 编译时常量(项目属性 > 复选框 "Define TRACE constant")。