浅谈Laravel中使用Slack进行异常通知


Posted in PHP onMay 29, 2021

概述

通常,我们可以依靠用户反馈、经常查看程序日志来发现程序存在的问题。但这要么不可靠要么不及时,所以下面我们介绍一种比较有效的做法--使用 Slack 通知程序跑出的异常信息。

Slack 是一款即时通信软件,类似于 QQ,它提供开放的 API,可以调用它向自己团队中指定的个人或者频道(Channel)发送消息,因此用它来进行异常通知是再合适不过的。

安装 maknz/slack-laravel 包

具体的安装方法请参考 Github 上的 [readme](https://github.com/maknz/slack-laravel)。

配置

安装完成后使用 php artisan vendor:publish 生成 config\slack.php 配置文件,然后在.env文件中添加如下三项配置值.

SLACK_ENDPOINT=//slack 终端,即 slack 接口地址

SLACK_CHANNEL=//消息默认接收频道

SLACK_USERNAME//消息默认接收人

> 当然,也可以直接直接在 config\slack.php 对应配置的默认值而不使用 .env,但并不推荐这样做。

> 根据实际需要设置 SLACK_CHANNEL 和 SLACK_USERNAME ,二者并不是必须的

调整 AppExceptionsHandler 类的 report 方法

实现 Slack 通知异常信息的逻辑。代码如下:

/**
 
 * Report or log an exception.
 
 *
public function report(Exception $e){
    if ($this->shouldReport($e)) {
        $slackMessage = "\n[Error.{$e->getCode()}] {$e->getMessage()}";
        $slackMessage.= "\n[Line.{$e->getLine()}] {$e->getFile()}";
        $slackMessage.= "\n[Time] ".date('Y-m-d H:i:s');
        try {
            Slack::to(config('slack.channel'))->send($slackMessage);
        } catch (\Exception $eOther) {
            \Log::info($slackMessage);
        }
    }
    return parent::report($e);
}

对于一些可能频繁出现但又不致命的异常,例如404 NotFoundHttpException,我们可能并不想让程序通知它。为此,我们只需要在 Aop\Exceptions\Handler 类里的 $dontReort 属性中加入指定的异常的类型就可以了。

protected $dontReport = [
 
    NotFoundHttpException::class,
 
    // ...
 
];

示例中展示的是对指定的频道(channel)发送信息,当然你还可以向指定的人发送,或者其它更复杂的用法。不过要注意指定的用户名和频道是自己 slack 团队中已经存在的,不然会出错。

这样,当程序中出现异常时,运维能在第一时间收到相关的通知信息,方便及时处理了。

以上就是浅谈Laravel中使用Slack进行异常通知的详细内容,更多关于Laravel中使用Slack进行异常通知的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
ThinkPHP标签制作教程
Jul 10 PHP
PHP输出日历表代码实例
Mar 27 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
详解Go与PHP的语法对比
May 29 #PHP
详解php中流行的rpc框架
如何在Mac上通过docker配置PHP开发环境
浅谈如何提高PHP代码质量之端到端集成测试
May 28 #PHP
浅谈如何提高PHP代码质量之单元测试
May 28 #PHP
浅谈如何提高PHP代码的质量
May 28 #PHP
详解thinkphp的Auth类认证
May 28 #PHP
You might like
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
js转html实体的方法
2016/09/27 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
js实现选项卡效果
2020/03/07 Javascript
详解JS函数防抖
2020/06/05 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
一个超级简单的python web程序
2014/09/11 Python
python读取和保存视频文件
2018/04/16 Python
Python最小二乘法矩阵
2019/01/02 Python
python 同时读取多个文件的例子
2019/07/16 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
树莓派升级python的具体步骤
2020/07/05 Python
python如何变换环境
2020/07/21 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
周年庆典邀请函范文
2014/01/24 职场文书
代码复现python目标检测yolo3详解预测
2022/05/06 Python