我在node.js项目中使用了pm2(https://github.com/Unitech/pm2)。此外,我还在Logentries(https://logentries.com)中发送应用程序错误日志。
我想知道是否可以从应用程序中记录未捕获的异常(例如,当某些内容失败并且pm2重新启动应用程序时)?我知道使用process.on('uncaughtException')
是不好的做法,所以希望听到一些建议。
谢谢!
答案 0 :(得分: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);
});
(1):Javascript Error reference
修改强>
pm2-interface现已弃用,请改用require('pm2')
。您可以使用bus system events完成与下面完全相同的操作。
使用pm2的替代方法是使用pm2-interface并聆听process:exit
或process: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');
});
});
当通过监控过程管理多个流程时,这非常有用。
您可能需要查看how to build a custom pm2 logger上的博文。它可以通过pm2-interface
为您提供有关监控流程的一些想法。