浅谈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 相关文章推荐
PHP入门速成教程
Mar 19 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
PHP 正则表达式常用函数
Aug 17 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 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
如何过滤高亮显示非法字符
2006/10/09 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
php7 新增功能实例总结
2020/05/25 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python 转义字符详细介绍
2017/03/21 Python
Python实现Kmeans聚类算法
2020/06/10 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python 字典中取值的两种方法小结
2018/08/02 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
详解python中的数据类型和控制流
2019/08/08 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
什么是python的id函数
2020/06/11 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
施工班组长岗位职责
2014/01/05 职场文书
工作交流会欢迎词
2014/01/12 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL