我在 ec2 上运行一些 Meteor 应用程序,如果用户遇到 500 错误,我希望通过电子邮件收到通知。有没有办法捕获所有 500 个错误并在一个地方处理?
1 回答
所有服务器端错误都应该输出到您的服务器日志中。我在使用https://github.com/storyandstructure/meteorite-ec2-install上的脚本安装的 EC2 实例上运行 Meteor 应用程序,它配置了一些东西,以便我的应用程序的日志保存在/var/log/myapp.log
;你的设置可能有类似的东西。
至于在发生错误时收到电子邮件,有两种选择。对于由于代码(即不是来自包)而引发的所有错误,只需找到您放置代码的throw new Meteor.Error
位置并在其后添加一行Email.send(...)
。(当然,请确保您已添加电子邮件包并设置了有效的 MAIL_URL。)
如果它们将任何内容返回给调用函数,您甚至可以通过这种方式捕获一些由包引起的错误;例如,如果电子邮件包的 send() 函数失败,则会引发错误,您可以try-catch
在您正在调用的代码块中捕获该错误Email.send()
(然后,嗯,您可以Email.send
再次调用,希望第二次可以工作;虽然如果第一次失败是因为收件人,也许一封给你的电子邮件会起到作用)。
对于由于包不向调用函数返回任何反馈而引发的错误,这更难。您必须创建一个单独的应用程序,该应用程序也在服务器上运行守护进程,它会每隔一段时间读取服务器日志文件并查找Exception
或Error:
在一行的开头。每当找到该文本时,您的监控应用程序就会向您发送一封电子邮件(可能还会将日志中的一些最新行复制到电子邮件正文中)。这个其他应用程序不需要是 Meteor 应用程序,事实上,如果它是一个简单的 node.js 应用程序可能会更好,不监听任何端口。希望您担心错误的唯一软件包(例如电子邮件)都将错误发送到链上,以便您的应用程序逻辑可以捕获它们并对其进行处理。