oji3t/e2slack

一个在发生异常时向Slack发送消息的包。

1.0.0 2016-08-09 09:25 UTC

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等。

  1. endpoint…设置的端点。默认为null
  2. channel…发送消息的Slack频道。默认为'#general'。也可以指定为'@user.name'这样的格式。
  3. username…发送消息的bot的名称。默认为'Notification'。根据错误类型进行更改可能很方便。
  4. 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均不承担责任,请予以理解。