LaravelでJob(ジョブ)が失敗した時に通知する

2023/09/13

環境:Laravel9.x

Laravelでジョブを使用して処理をしている中で、失敗した時に通知したいシーンがあったのでメモ。

ジョブ全体の失敗時に通知する場合

とりあえず、全てのジョブで失敗に終わった時に通知したい、と言う場合はAppServiceProviderにリスナーを追加する。

app/Providers/AppServiceProvider.phpのbootメソッド内に追記

use Illuminate\Queue\Events\JobFailed;
use Illuminate\Support\Facades\Queue;

public function boot()
    {

        // ジョブ失敗時の通知
        Queue::failing(function (JobFailed $event) {
            $jobName = $event->job->resolveName();
            Log::channel('slack')->error("Job: {$jobName} | {$event->connectionName} | {$event->job->getName()} failed: {$event->exception->getMessage()}");
        });
    }

※今回はslackに通知をしたかったので、Logチャンネルはslackにしています。

※どのジョブのエラーかを判別するのは、

$jobName = $event->job->resolveName();

でやっています。

ジョブ単体でエラー処理をしたい場合

各ジョブにfailedメソッドを作成する。

public function failed($exception)
{
    Log::channel('slack')->error('Job failed: ' . $exception->getMessage());
}

以上