启用了--trace-events的节点v8.5不生成跟踪日志文件

时间:2017-09-27 19:40:27

标签: node.js

我正在运行节点v8.5,我正在尝试使用实验性跟踪功能。

启动我的应用程序node --trace-events-enabled app.js我希望看到根据此处https://nodejs.org/api/tracing.html的节点文档生成跟踪日志文件,我可以通过访问chrome://tracing并加载生成的跟踪日志来查看文件。

但是,似乎节点根本不生成该日志文件。是否缺少设置,或者日志文件是否保存在项目目录之外?

1 个答案:

答案 0 :(得分:1)

我最近尝试使用节点v8.9.1,并且正确创建日志取决于您关闭app.js的方式。

此示例的应用程序正常运行:它在您启动节点的目录中创建名为node_trace.1.log 的文件node --trace-events-enabled ./bin/trace-me.js将在./中创建文件) :

console.log("Trace me");

const interv = setInterval(()=>console.log("Runnning"), 1000);

// quit on ctrl-c when running docker in terminal
process.on('SIGINT', function onSigint() {
    console.info('Got SIGINT (aka ctrl-c). Graceful shutdown ', new Date().toISOString());
    clearInterval(interv);
});

process.on('beforeExit', function (exitCode) {
   console.log("Before exit: "+ exitCode);
});

例如,如果您使用ctrl-c终止流程而不管理它,则不会调用beforeExit事件,也不会创建跟踪日志。

如果您致电process.exit()

,也一样
  即使还有,它也会尽快终止   尚未完全完成的异步操作挂起,   包括对process.stdout和process.stderr的I / O操作。   为described on docs

因此,解决方案正确管理SIGINTSIGTERM事件,并检查是否调用了beforeExit,因为只有在Node.js清空其事件循环并且未被杀死时才会发出它