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());
}
以上