未上线的代码无论再测试,也不可能保证全无 bug ,很多 bug 一直隐藏在某个阴暗的角落,邪恶又猥琐地等着你将其部署上线,然后在某个条件的触发下,开始兴风作浪...
在线上调试是程序员的恶梦,对于初级程序员来说更是如此。相当于给正在飞行的飞机更换重要零件,而且还不能让旅客有所感知。
这时候,就需要有一款 bug 监控系统,能在第一时间将各种异常捕获,并发送邮件提醒。你能看到异常的详细信息,能在客户,尤其是老板感知之前把 bug 先处理了。营造一种现世安好,天下太平的现象,毕竟,稳稳的幸福,是每个人的追求。
Sentry, 就是这样一款工具。
安装
对于 sentry 不了解的同学,先到官网看下 demo 演示,官方也提供免费服务,只是每月的异常提醒次数有限,仅作为体验。
此外由于是国外服务器,由于众所周知的原因,访问并不方便,幸好这是开源产品,我们可以在自己的服务器搭建
官方推荐用 docker 搭建,详细版见 官方文档
首先要安装 docker ,详情见 centos搭建docker及docker-compose
然后下载 sentry 仓库
$ git clone https://github.com/getsentry/onpremise.git
构建 sentry
$ cd onpremise
$ ./install.sh
构建过程中会提示你输入账号密码,用你的邮箱作为账号,以后该邮箱也用于接收邮件,奇怪的是,在构建时可以用 qq 邮箱,后面在项目中邀请成员却不能用,因此建议统一不用 qq 邮箱,可以用 163 或者 foxmail 等
安装完成后,执行以下命令让 sentry 服务在后台运行
$ docker-compose up -d
浏览器访问:http://你的服务器ip:9000
邮件设置
邮件发送的设置,以腾讯企业邮箱为例,在目录下的 docker-compose.yml
添加配置:
SENTRY_EMAIL_HOST: smtp.exmail.qq.com
SENTRY_EMAIL_USER: 你的邮箱地址
SENTRY_EMAIL_EMAIL: 你的邮箱地址
SENTRY_EMAIL_PASSWORD: 授权码
SENTRY_EMAIL_USE_TLS: 'true'
SENTRY_EMAIL_PORT: 587
重启 sentry 服务
docker-compose down && docker-compose up -d
新建 laravel 项目,按 sentry 所指示的进行配置即可
项目配置
安装扩展
$ composer require sentry/sentry-laravel:1.1.0
修改 app/Exceptions/Handler.php
的 report
方法:
public function report(Exception $exception)
{
if (app()->bound('sentry') && $this->shouldReport($exception)){
app('sentry')->captureException($exception);
}
parent::report($exception);
}
发布资源
$ php artisan vendor:publish --provider="Sentry\Laravel\ServiceProvider"
将 dns 加入环境变量
SENTRY_LARAVEL_DSN=http://e7de32........
验证
在路由文件中新增
Route::get('/debug-sentry', function () {
throw new Exception('My first Sentry error!');
});
浏览器访问 http://*****/debug-sentry
,到 sentry 以及邮件中查看是否能收到异常