浅谈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 auth_http类库进行身份效验
Mar 19 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP中Http协议post请求参数
Nov 02 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
实例化php类时传参的方法分析
Jun 05 PHP
PHP实现简单的计算器
Aug 28 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
一个简单的网页密码登陆php代码
2012/07/17 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python易忽视知识点小结
2015/05/25 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
刑事附带民事代理词
2015/05/25 职场文书
宇宙与人观后感
2015/06/05 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang