node.js - PM2将未捕获的异常记录到第三方服务(作为Logentries)

Kos*_*ika 5 javascript node.js uncaught-exception logentries pm2

我在node.js项目中使用pm2(https://github.com/Unitech/pm2).此外,我在Logentries(https://logentries.com)发送应用程序错误日志.

我想知道是否可以从应用程序中记录未捕获的异常(例如,当某些内容失败并且pm2重新启动应用程序时)?我知道使用process.on('uncaughtException')是不好的做法,所以想听听一些建议.

谢谢!

soy*_*uka 6

你在哪里读到这process.on('uncaughtException')是一个不好的做法?

只要在记录异常后退出进程,我就看不出有什么不好,这是一个例子:

process.on('uncaughtException', function(e) {
    console.error('Ouch, an unhandled exception');
    //I like using new Error() for my errors (1)
    console.error(e instanceof Error ? e.message : e);
    process.exit(1);
});
Run Code Online (Sandbox Code Playgroud)

(1):Javascript错误参考

编辑 pm2-interface现已弃用,请require('pm2')改用.通过使用总线系统事件,您将能够完成与下面完全相同的操作.


pm2的替代方法是使用pm2接口并监听process:exitprocess:exception事件:

var ipm2 = require('pm2-interface')();

ipm2.on('ready', function() {
  console.log('Connected to pm2');

  ipm2.bus.on('process:exception', function(data){
    console.log(data.pm2_env.name + 'had an exception');
  });
});
Run Code Online (Sandbox Code Playgroud)

当通过监视过程管理多个进程时,这非常有用.

您可能想查看有关如何构建自定义pm2记录器的博客文章.它可以为您提供有关监控过程的一些想法pm2-interface.

  • 对于生产过程来说,捕获并解决异常并不是一个好的做法。但是,如果您想在远程监控/调试时捕获错误,那么它很有用 (2认同)