oji3t/ e2slack
一个在发生异常时向Slack发送消息的包。
Requires
- maknz/slack: ~1.0
Requires (Dev)
- phpunit/phpunit: ~5.5
- vlucas/phpdotenv: *
This package is not auto-updated.
Last update: 2024-09-14 19:20:10 UTC
README
这是一个在发生异常时向Slack发送通知的库。在许多PHP开发中都可以使用。它只允许最小的扩展,只需安装和一些配置就可以立即使用。我们随时接受功能建议、Pull请求和错误报告。由于我们以能够立即接收通知为前提进行开发,因此请另外记录完整的日志。
开始使用
Slack配置
由于使用Slack webhook,因此需要相应的设置。这比安装此库要简单。请以有权访问的账户登录后,访问此处以创建incoming-webhook的集成,然后在过渡页面中确认endpoint,请保留它。如果一切顺利,URL应该是类似于https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXX
的格式。如果没有权限的账户,将会以英语显示“权限不足”的错误消息,请咨询有权访问的人。
库的安装
仅支持使用composer进行安装。请使用以下命令进行安装。
$ composer require oji3t/e2slack
以上准备工作完成。
使用方法
基本使用
请传递PHP的异常实例和Slack的设置作为参数。
use ExceptionToSlack\Notification; use FooException; try { throw new FooException; } catch (FooException $e) { $config = ['endpoint' => YOUR_WEBHOOK_ENDPOINT]; $notification = new Notification($e, $config); $notification->send(); }
如果autoload有效,则可以像以下这样编写。这和上面的代码完全一样。当然,如果您已经定义了e2slack函数,则它将优先使用,这样就不会破坏您已经创建的应用程序。但是,请注意,在状态中使用此包提供的e2slack函数可能会导致PHP错误,所以请小心。
use FooException; try { throw new FooException; } catch (FooException $e) { $config = ['endpoint' => YOUR_WEBHOOK_ENDPOINT]; e2slack($e, $config); }
可以根据发送的异常类型将消息发送到不同的频道。
配置
由于我们假定安装后即可使用,因此可配置的内容不多,但可以根据需要进行以下更改。endpoint等信息不应泄露给他人,因此建议使用Dotenv等。
- endpoint…设置的端点。默认为
null
。 - channel…发送消息的Slack频道。默认为
'#general'
。也可以指定为'@user.name'
这样的格式。 - username…发送消息的bot的名称。默认为
'Notification'
。根据错误类型进行更改可能很方便。 - icon…发送消息的bot的图标。指定图像文件的URL或表情符号。默认指定了可爱的表情符号。
请将上述项作为键,以关联数组的形式指定为第二个参数。此外,在创建实例后也可以覆盖设置。
use ExceptionToSlack\Notification; use FooException; try { throw new FooException; } catch (FooException $e) { $config = ['endpoint' => YOUR_WEBHOOK_ENDPOINT]; $notification = new Notification($e, $config); $notification->setUsername('Debug Bot'); $notification->setChannel('@user.name'); $notification->setIcon(':love_letter:'); $notification->send(); }
此外,许多PHP框架都附带配置功能或错误处理功能,因此请分别使用它们。例如,在Laravel5中可以这样做。
// .env SLACK_ENDPOINT=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXX SLACK_CHANNEL=#a_project_channel SLACK_USERNAME=Notification SLACK_ICON=:love_letter:
// config/services.php return [ // ~~~ 'e2slack' => [ 'endpoint' => env('SLACK_ENDPOINT'), 'channel' => env('SLACK_CHANNEL'), 'username' => env('SLACK_USERNAME'), 'icon' => env('SLACK_ICON'), ], ];
// app/Exceptions/Handler.php namespace App\Exceptions; use Exception; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Http\Response; use App\Exceptions\FooException; use ExceptionToSlack\Notification; class Handler extends ExceptionHandler { // ~~~ public function render($request, Exception $e) { if ($e instanceof FooException) { $notification = new Notification($e, config('services.e2slack')); $notification->send(); } return parent::render($request, $e); } }
消息发送错误的处理
当消息发送成功时,send方法和e2slack函数将返回当前实例。这是为了考虑将消息重新发送到其他频道等情况而进行的实现。如果由于某些原因发送失败,上述任何一个都会返回false。要获取发送失败,请使用$notification===false
等。
注意点
请谨慎管理endpoint等信息,以防止泄露。如果包在处理时内部发生错误,存在导致无限循环的风险,因此请勿将发送消息的实现与PHP的Exception基类相结合。因此,由于使用此包可能导致的任何损害,开发者Takara Oji均不承担责任,请予以理解。