Node.js - PM2将未捕获的异常日志记录到第三方服务(如Logentries)

8
我正在我的node.js项目中使用pm2 (https://github.com/Unitech/pm2)。同时,我将应用程序的错误日志发送到Logentries (https://logentries.com)。

我想知道是否可能记录应用程序的未处理异常(例如,当某些事情严重失败并导致pm2重新启动应用程序时)?我知道使用process.on('uncaughtException')是不良实践,所以希望听取一些建议。

谢谢!

1个回答

7

你从哪里得知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);
});

(1): Javascript错误参考

编辑 pm2-interface 现已弃用,请使用require('pm2')。通过使用总线系统事件,您将能够像下面一样做。


在pm2中的另一个选择是使用pm2-interface并侦听处理程序退出处理程序异常事件:

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');
  });
});

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

您可能想查看关于如何构建自定义pm2日志记录器的博客文章。它可以给您一些关于通过pm2-interface监控进程的想法。


1
从npm文档中得到的信息:'uncaughtException'是一种简单的异常处理机制,仅在最后一种情况下使用 https://nodejs.org/api/process.html#process_warning_using_uncaughtexception_correctly - cloakedninjas
2
在生产过程中捕获和解决异常并不是一个好的实践。然而,如果您想在远程监视/调试时捕获错误,这是有用的。 - nvbalaji
你的“总线系统事件”链接已经失效。 - Benjamin Crouzier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接