本教程是 Envato Tuts +上的“ 使用PHP构建启动”系列 的一部分。 在本系列文章中,我 将以 我的 Meeting Planner 应用程序作为真实示例 ,指导您完成从概念到现实的启动 。 在此过程的每一步中,我都会将Meeting Planner代码作为开放源代码示例发布,您可以从中学习。 我还将解决与启动相关的业务问题。
错误记录简介
一旦Meeting Planner进入alpha版本,人们开始积极使用它来安排会议,将发生用户很少报告的错误。 但是,在与人通电话时,他们通常会告诉我他们遇到的问题。
在今天的教程中,我将向您介绍如何尝试两种不同的基于云的日志记录服务,即Rollbar和Sentry ,以及为什么我最终暂时选择使用Sentry。
如果您尚未尝试使用会议计划器,请继续并安排您的第一次会议 。 我确实参与了下面的评论主题,所以请告诉我您的想法! 您也可以通过Twitter @reifman与我联系 。 如果您想为以后的教程提出新功能或主题,我特别感兴趣。
提醒一下,Meeting Planner的所有代码都是在PHP的Yii2框架中编写的。 如果您想了解有关Yii2的更多信息,请查看我们的平行系列“ 使用Yii2编程” 。
让我们开始。
我对Rollbar的体验
Yii Framework背后的主要志愿者开发人员之一Alex Makarov向我推荐了Rollbar和Sentry 。 在构建Meeting Planner并撰写该框架的好处时,Alex对我扩展关于Yii2的专业知识非常有帮助。
最初,我考虑过创建辅助数据库连接来记录我的错误并手动跟踪它们。 但是后来,我注意到这些服务提供了许多高级报告功能。 例如,他们计算相同错误的数量并按严重性报告它们。 在某个时候,我将为Yii编程系列编写一个更通用的Yii2错误日志记录教程,但就目前而言,我还是很投入。
而且,在我掌握基本知识的同时,为Rollbar使用了一些开源Yii2插件(有几个)。 我开始遇到实际上是由插件引起的生产错误。
总体而言,Rollbar的Web用户界面和服务给我留下了深刻的印象。 但是我相信我的配置和开源Yii扩展存在一些问题,导致了新问题。
换句话说,由于我尝试记录其他错误,人们看到了生产错误。 这使人们对会议策划者的印象恶化。 甚至我也遇到了新出现的神秘生产错误,这既混乱又浪费我的时间。
为了优化他们的经验和时间,我暂时禁用了错误处理,并决定尝试使用Sentry。
需要明确的是,我认为使用更好的Rollbar Yii2扩展和更仔细的配置(此类第三方插件从来没有很好地证明这一点),该服务将运行良好。 我不想阻止您尝试。
Sentry入门
Sentry是一种可比较的日志记录服务,尽管价格比Rollbar便宜。 较低的成本通常对初创企业很有帮助。
您会发现他们的第一个价格涨幅仅为每月$ 29 :
报名
我继续并使用“注册”表单开始使用:
创建一个新项目
在Sentry中,我为Meeting Planner 创建了一个新项目来跟踪此域中的错误:
然后,Sentry为您提供了多种语言和框架的指南(尚未包含Yii,向Sentry团队提示!):
配置Yii2 Sentry插件
对于会议计划者 ,我选择使用Notamedia Yii2 Sentry扩展 。 我遇到了几个小问题,使我放慢了脚步。
第一个问题-不是插件的错误
首先,我很难找到我的站点的唯一授权码以向Sentry标识自己。 通常,Web服务使这些查找变得非常容易,但是我花了大约10到15分钟的时间才能找到它们。
在“ 设置”页面的左侧菜单底部附近,有一个“ 客户端**”(DSN)选项可显示它们:
我将**分为三个部分,并将它们放入会议计划程序所有**的mp.ini文件中:
#rollbar_key = "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxf"
sentry_key_public = "bxxxyyyyxxxzzzzyyyyccccc"
sentry_key_private = "8b3333xxxyyyyxxxzzzzyyyyccccc4446"
sentry_id ="9922"
在/frontend/config/main.php中,我更新了插件的建议设置,以使用mp.ini中的特定变量。 它们从$ config开始:
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'notamedia\sentry\SentryTarget',
'dsn' => 'http://'.$config['sentry_key_public'].
':'.$config['sentry_key_private'].
'@sentry.io/'.$config['sentry_id'],
'levels' => ['error', 'warning'],
'context' => true, // Write the context information. The default is true.
],
],
第二个问题
然后,我无法让Sentry捕获错误报告。 事实证明,notamedia插件的文档使用URL sentry.com而不是sentry.io 。 幸运的是,我在短短几分钟内就发现了这一点,并且没有浪费太多时间。
哨兵介绍性电子邮件
Sentry确实向您发送了一封介绍性电子邮件,但直到后来我才注意到。 尽管如此,它还是很有帮助的:
与会议计划者一起测试哨兵
在本地环境中的一个控制器上,我刚刚将代码添加到actionIndex
,该代码将在我在网站上加载页面时加载:
\Yii::warning have a problem Portland.');
漏洞报告很快就从本地和生产环境中引入。 它们降落在Sentry仪表板中。
哨兵仪表板
这是报告我的一个虚假测试错误的示例,“ 我们有一个波特兰问题。 ”它显示了Sentry为您收集的所有有用数据,使发现,识别和调试生产错误更加容易:
在上方,您可以看到与URL和用户浏览器相关的标签。 下面的报告继续向您显示导致错误的代码行:
它还在上方显示cookie,在下方显示标题和用户ID:
都非常有帮助。
Sentry电子邮件警报到新错误
默认情况下,Sentry还会通过电子邮件将错误发送给您(以便您立即了解它们):
实际上,很快,Sentry就向我展示了WordPress黑客机器人已经在我的网站上对wp-login和wp-admin进行ping操作。 即使它们在这里不存在,我也希望将其影响最小化。 因此,我在前端SiteController.php中添加了一个梦幻岛操作,以结束应用程序的执行。
public function actionNeverland()
{
// for abusive scripts like wp-login probes
Yii::$app->end();
}
Sentry还发现我的后台任务中的缓存发生了权限问题。 这也很有帮助。
目前,我已经在Sentry上出售了产品,并且我希望它能在正在进行的预览版发布中投入生产,并从中快速受益。
下一步是什么?
希望您喜欢有关生产错误处理和日志记录的学习。
在“ 使用PHP构建您的启动”系列中观看即将发布的教程。 今年我做了很多功能开发和完善。 现在,该让人们使用Meeting Planner了。 很快,我将为预览版撰写促销计划-这是启动您的创业公司的另一个关键要素。
如果您还没有,请尝试安排时间并与您的朋友共享会议计划器。 与往常一样,如果您在下面的评论中分享您的经验,我将不胜感激,并且我一直对您的建议感兴趣。 您随时可以直接通过Twitter @reifman与我联系 。
基于SEC新的众筹规则的实施,我也越来越接近与WeFunder展开实验。 您可以根据需要在此处关注我们的个人资料 。 我还将在以后的教程中写更多有关此的内容。
相关链接
翻译自: https://code.tutsplus.com/tutorials/building-your-startup-error-logging--cms-27349