我们不能依靠用户来报告生产中的所有错误。用户通常会在遇到错误时离开网站,并且很可能不会向我们报告该问题。当他们报告问题时,我们将获得哪些信息?我们需要重现该问题吗?他们在哪个网址上?但是,可以捕获,记录,确定优先级和调查这些信息。
我们通过Sentry(https://sentry.io)将传统日志记录与解决异常集成在一起。 Sentry主要用于可操作的错误或崩溃(crashes)。我们应该主动做的事情。 Sentry将通过崩溃报告捕获我们需要的其他信息,并提供解决错误的界面。 Sentry不能替代传统的日志记录。 Sentry也不替代APM(应用程序性能监视)。如果我们要使用Rollbar或Sentry的任何其他替代方法,则将应用相同的原则。
try {
pseudoJson = this->getPseudo();
return response(Response.HTTP_SUCCESS, pseudoJson);
} catch (PseudoException exception) {
Sentry.captureException(exception);
Log.error(
'pseudo: Unable to pseudo '. NEW_LINE . exception
);
return response(Response.HTTP_BAD_REQUEST, ['Friendly user message :)']);
}
在该示例中,我们同时使用了传统的日志记录和Sentry。最后,给出了用户友好的响应。这只是一个示例,在所有情况下,我们都应考虑记录和不记录的内容。例如,在没有实际异常或错误的情况下记录警告和信息可能是适当的。在这种情况下,可能不需要使用Sentry登录。请注意,异常也可以在全局级别捕获,并不总是需要try catch。
仅当您具有有意义的处理方式时才捕获异常。如果仅记录异常并将其进一步抛出堆栈,则不要捕获异常。它没有意义,代码混乱。如果您期望代码的特定部分失败,并且对此有备用,或者打算以特定方式抛出它,请务必捕获异常。全局异常处理将涵盖其他所有内容。
必须设置Sentry以全局捕获应用程序异常。对于Nuxt,可以通过以下模块来实现:https://github.com/nuxt-community/sentry-module。而对于节点api,我们需要将Sentry添加到正确的位置以捕获全局错误,例如:
对于我们的api服务,请考虑设置私有npm软件包,以向我们提供与vendor无关的实现。因此,我们实现了vidaXL错误处理,并且无论Sentry(raven),滚动条或其他任何背后的方法都调用相同的方法。因此,如果我们确实切换到其他vendor,则会在一个地方而不是在所有API上进行更新。
在监视监视通道时,团队可以组织自己,但是应该经常检查这些通道。一旦出现新的错误,应最多调查一个小时。在此时间内,可以确定错误的优先级。如果需要立即解决问题,则团队必须优先解决此问题。如果不是很紧急,那么错误可能仍然是可以立即解决的快速修复,或者可以创建后续凭单并与产品所有者进行跟进,后者可以将其计划为冲刺。