资讯专栏INFORMATION COLUMN

在 Laravel 中使用 Slack 进行异常通知

imccl / 1691人阅读

摘要:是一款即时通信软件,类似于,它提供开放的,可以调用它向自己团队中指定的个人或者频道发送消息,因此用它来进行异常通知是再合适不过的。这样,当程序中出现异常时,运维能在第一时间收到相关的通知信息,方便及时处理了。

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

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

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

安装 maknz/slack-laravel 包

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

配置

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

```
SLACK_ENDPOINT=//slack 终端,即 slack 接口地址
SLACK_CHANNEL=//消息默认接收频道
SLACK_USERNAME//消息默认接收人
```
> 当然,也可以直接直接在 configslack.php 对应配置的默认值而不使用 .env,但并不推荐这样做。

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

调整 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 = "
[Error.{$e->getCode()}] {$e->getMessage()}";
    $slackMessage.= "
[Line.{$e->getLine()}] {$e->getFile()}";
    $slackMessage.= "
[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,我们可能并不想让程序通知它。为此,我们只需要在 AopExceptionsHandler 类里的 $dontReort 属性中加入指定的异常的类型就可以了。
    protected $dontReport = [
        NotFoundHttpException::class,
        // ...
    ];

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23313.html

相关文章

  • Laravel Telescope:优雅的应用调试工具

    摘要:文章转自视频教程优雅的应用调试工具新扩展是由和开源的应用的调试工具。计划任务列出已运行的计划任务。该封闭函数会被序列化为一个长字符串,加上他的哈希与签名如出一辙该功能将记录所有异常,并可查看具体异常情况。事件显示所有事件的列表。 文章转自:https://laravel-china.org/topics/19013视频教程:047. 优雅的应用调试工具--laravel/telesco...

    MasonEast 评论0 收藏0
  • Laravel 5.8 前瞻

    摘要:发布于年月,从那时起大约每六个月会发布一次的新版本。将会支持相对较新的来管理项目中的环境文件。弃用和辅助函数所有的和全局辅助函数都已弃用,将在中删除。将返回更干净的相同值。和通知和通知已从主项目中删除,并提取到第三方软件包中。 showImg(https://segmentfault.com/img/remote/1460000018269419?w=585&h=400); 无论是从零...

    tianhang 评论0 收藏0
  • Laravel 事件系统用法总结

    摘要:事件类保存在目录中,而这些事件的的监听器则被保存在目录下。这些目录只有当你使用命令来生成事件和监听器时才会被自动创建。事件机制是一种很好的应用解耦方式,因为一个事件可以拥有多个互不依赖的监听器。参考链接事件系统队列原文地址 Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 a...

    Big_fat_cat 评论0 收藏0
  • [Laravel 5.3] Notification 个人理解,及 BearyChat Channe

    摘要:提供了一种全新的发送通知的方式。个人理解是可以基于某事件操作触发一系列的通知任务,而通知方式由通知渠道接管,这样使得通知或推送逻辑更抽象,更易于管理和重构。在之前,我是利用的来完成这一系列通知。使用的配置文件还是原来的,无需重新配置。 Laravel Notification Laravel 5.3 提供了一种全新的发送通知的方式:Notification 。个人理解是可以基于某事件(...

    Yang_River 评论0 收藏0
  • Laravel 5.3 预热:10 个你需要知道的变更

    摘要:本文经授权转自社区说明发布临近,大体构建已经完成,文档整理完成后即可发布。附带了一个响应式邮件模板,通知类中唯一需要做的就是像下面这样发送消息错误处理是一个可选的扩展包,提供了完整可用的服务。 本文经授权转自 PHPHub 社区 说明 Laravel 5.3 发布临近,大体构建已经完成,文档整理完成后即可发布。 下面是对 Laravel 5.3 新特性的整理,不完整列表。 1、全文搜...

    沈建明 评论0 收藏0

发表评论

0条评论

imccl

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<