laravel 控制器中使用中间件_在 Laravel 中使用 Slack 进行异常通知

a5f6f9ee6a0791f2edeab447fdc80c0e.png

php中文网最新课程

每日17点准时技术干货分享

f64f5da8470e7669a37e17ce52d0898d.png

4b1bbdfba71418f3403166f7b7e2144a.gif

异常处理是软件开发过程中无法逃避的问题。对于一套设计良好代码高效的程序,出现异常的可能性会比较低,但这并不意味着不会出现异常,有些异常甚至会引起严重的后果,所以如何及时的发现程序中的异常并处理它便显得十分重要了。

通常,我们可以依靠用户反馈、经常查看程序日志来发现程序存在的问题。

但这要么不可靠要么不及时,所以下面我们介绍一种比较有效的做法--使用 Slack 通知程序跑出的异常信息。

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

1.安装 maknz/slack-laravel 包

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

2.配置

安装完成后使用 php artisan vendor:publish 生成 config\slack.php 配置文件,然后在.env文件中添加如下三项配置值.```SLACK_ENDPOINT=//slack 终端,即 slack 接口地址SLACK_CHANNEL=//消息默认接收频道SLACK_USERNAME//消息默认接收人```> 当然,也可以直接直接在 config\slack.php 对应配置的默认值而不使用 .env,但并不推荐这样做。> 根据实际需要设置 SLACK_CHANNEL 和 SLACK_USERNAME ,二者并不是必须的

3.调整 AppExceptionsHandler 类的 report 方法,实现 Slack 通知异常信息的逻辑。

代码如下:

/** * Report or log an exception. * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param  \Exception  $e * @return void */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 团队中已经存在的,不然会出错。

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

36fbed150a7139808d59782419c4ecc6.png

6c505ed90f4e4aa09ddd33bf3b83fd65.png

cf7bda710e5ab3ae1e816d66b4b99e9e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]ListView学习笔记(一)——缓存机制

要想优化ListView首先要了解它的工作原理,列表的显示需要三个元素:ListView、Adapter、显示的数据; 这里的Adapter就是用到了适配器模式,不管传入的是什么View在ListView中都能显示出来。 下面简单说下上图的原理: 1、…

golang反编译_【Golang】脱胎换骨的defer(一)

Go语言的defer是一个很方便的机制,能够把某些函数调用推迟到当前函数返回前才实际执行。我们可以很方便的用defer关闭一个打开的文件、释放一个Redis连接,或者解锁一个Mutex。而且Go语言在设计上保证,即使发生panic,所有的defer调…

cad填充图案乱理石_CAD软件中如何自定义CAD填充图案?

在使用浩辰CAD软件绘制完成图纸后,发现自己绘制的CAD图纸没有做好区域分割,显得特别乱。这个时候该怎么办呢?快试试CAD填充图案吧!接下来就由小编来给大家介绍一下浩辰CAD软件中自定义CAD填充图案的操作教程吧!浩辰CAD…

单例设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

ansi编码转换_8b/1b编码是个什么东东

使用串行比并行总线可以节省更多的布线空间,芯片、电缆等的尺寸可以做得更小,同时传输速率更高。但是,在很多数字系统如CPU、DSP、FPGA等内部,进行数据处理的最小单位都是Byte,即8个bit,如何把一个或多个By…

使用CSDN云服务搭建一个WordPress 个人站点(详细教程)

目录 前言 站点效果图 搭建服务的一些准备工作 第一步。进入到云服务我的账号模块,创建一个项目, 第二步,先免费领取一台云主机, 第三步,进入云主机控制台 搭建站点操作步骤 第一步,登录云主机 第二…

使用CSDN云服务搭建一个WordPress 个人站点(视频教程)

目录 前言 视频教程 文字版教程 云主机体验地址 官方文档 前言 六一儿童节体验了一下CSDN云主机相关的服务,感觉最近官方最近变化很大,业务范围很广,这里简单体验了一下云主机,给大家分享一点心得,希望对大家有所启…

石板切割问题c语言_岩知识 | 岩板切板有讲究,工艺问题要注意

岩板的火继续烧着,岩板的深加工厂在不断地增加着,岩板的深加工产品正在走向各个建筑项目,逐渐在受到很多项目的宠爱。岩板作为与天然石材完全不同的产品,其优越的理化性能在许多方面胜过天然石材,但也有其严重的不足。…

JavaScript测验题回顾-刷题笔记001

目录 1.我们可以在下列哪个 HTML 元素中放置 Javascript 代码?​编辑 2.写 "Hello World" 的正确 Javascript 语法是? 3.插入 Javacript 的正确位置是? 4.引用名为 "xxx.js" 的外部脚本的正确语法是? 5.如…

java 方法委托托管_Java Web托管选项流程图

java 方法委托托管我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 在带有嵌入式服务器的Eclipse中创建它很好,但是如何将它带给人们呢? 长期以来,对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近发生了…

react重新渲染菜单_React实现递归组件

前言今天来实现一个 React 的递归组件。具体的效果图如下:图片说明假设后端返回的数据如下:[{ id: 1, parent_id: 0, name: 广东省, children: [{ id: 2, parent_id: 1, name: 广州市, …

JavaScript测验——给代码添加注释---第一关

校验规则 创建一个//样式的注释, 被注释的文本至少要包含 5 个字符。 创建一个/* */样式的注释, 被注释的文本至少要包含 5 个字符。

举重设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

JavaScript测验——声明变量---第2关

校验规则 注意: 变量名称可以由数字、字母、美元符号$ 或者 下划线_组成,但是不能包含空格或者以数字为开头。 闯关: 使用var 关键字来创建一个名为salePrice的变量。

palapaweb怎样开启服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...

前言既要低头赶路,又要抬头望天,科技是为人服务的,任何技术背后都有更深层次的考量。之前的文章中咱们聊了很多微服务的相关内容,简而言之,微服务的本质,就是一种可以加速分工、促进合作的新协作机制。知其…

list集合

List集合 List集合的概述 有序集合(也称之为序列),用户可以精确的控制列表中的每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素 与 Set 集合不同,列表通常允许重复的元素 List 集合的特点 有…

JavaScript测验——使用赋值运算符---第3关

校验规则 以上代码数值8被赋给变量myVar中,然后再次将变量myVar解析为8并将其赋给myNum变量。 闯关: 把数值6赋给变量 x。 然后把变量x中的内容赋给变量y。

antd table排序 vue_商品品牌业务之Vue编写前端页面

今天是刘小爱自学Java的第145天。感谢你的观看,谢谢你。学习计划安排如下:打算从前端页面到后台服务器代码完整地写一遍,但显然我高估了自己的实力,几个小时的时间根本不够用。并且因为教程和vue现在最新的组件用法不一样&#xf…

JavaScript测验——使用赋值运算符初始化变量---第4关

通常在声明变量的时候会给变量初始化一个初始值。 例如: var myVar 0; 以上代码创建一个名为myVar的变量并指定一个初始值0。

Zabbix-3.0.0 安装Graphtree

导读Zabbix中,想要集中展示图像,唯一的选择是screen,后来zatree解决了screen的问题,但性能不够好。Graphtree 由OneOaaS开发并开源出来,用来解决Zabbix的图形展示问题,性能较好。一、Graphtree功能概述集中…