浅谈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 相关文章推荐
pw的一个放后门的方法分析
Oct 08 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
关于PHP语言构造器介绍
Jul 08 PHP
PHP网络操作函数汇总
May 18 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
php登录超时检测功能实例详解
Mar 21 PHP
Laravel实现通过blade模板引擎渲染视图
Oct 25 PHP
php实现的简单多进程服务器类完整示例
Feb 01 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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
Sony CFR 320 修复改造
2020/03/14 无线电
ThinkPHP视图查询详解
2014/06/30 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
详解python编译器和解释器的区别
2019/06/24 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python tkinter组件摆放方式详解
2019/09/16 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
Python的两道面试题
2013/06/29 面试题
函授自我鉴定范文
2014/02/06 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
联欢会开场白
2015/06/01 职场文书
工作时间证明
2015/06/15 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS