You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查Laravel SendSMSJob队列任务执行失败的原因?

Laravel队列任务失败调试方案

问题背景

SendSMSJob队列任务构造函数可正常写入system_logs日志,但handle()方法执行失败,catch代码块与failed()方法均未写入数据库日志,队列监听显示任务执行失败。


调试步骤

1. 修复异常捕获范围

当前代码仅捕获\SpecificException,但Guzzle请求抛出的是RequestException等其他异常类型,导致异常未被捕获直接触发任务失败。修改handle()方法的捕获逻辑:

public function handle()
{
    try{
        $client = new Client();
        $client->request('POST','https://api.kavenegar.com/6D/vrfy/lookup.json',[
            'form_params' => [
                'receptor' => $this->mobile,
                'token' => $this->code,
                'template' => $this->temp,
                'token2' => $this->token2,
                'token3' => $this->token3
            ]
        ]);

    } catch (\Exception $e) { // 改为捕获所有异常
        DB::table('system_logs')->insert([
            'message' => 'Handle异常: ' . get_class($e) . ' - ' . $e->getMessage(),
            'stack_trace' => $e->getTraceAsString() // 若system_logs无此字段,可临时合并到message中
        ]);
    }
}

2. 绕过数据库事务写入失败日志

队列任务执行时可能处于数据库事务中,failed()方法的插入操作会随事务回滚丢失。改用Laravel日志系统写入文件:

public function failed(\Exception $e)
{
    \Illuminate\Support\Facades\Log::error('SendSMSJob失败详情', [
        'message' => $e->getMessage(),
        'trace' => $e->getTraceAsString()
    ]);
}

之后查看storage/logs/laravel.log即可获取失败日志。

3. 直接查看Laravel系统日志

无需修改代码,直接查看storage/logs/laravel.log,Laravel会自动记录队列任务抛出的所有异常详情,包括未被捕获的异常信息。

4. 手动执行任务代码

使用tinker在控制台直接调用任务的handle()方法,实时查看报错:

php artisan tinker
$job = new App\Jobs\SendSMSJob('测试手机号', '123456', '测试模板');
$job->handle();

此方式可快速定位请求本身的问题(如API地址错误、参数无效)。

5. 验证Guzzle请求合法性

检查Kavenegar API地址格式是否正确:官方API地址应为https://api.kavenegar.com/v1/{你的API密钥}/verify/lookup.json,当前代码中的6D可能是不完整的密钥或路径错误,这会直接导致请求失败。

6. 开启队列详细输出

执行队列监听时添加--verbose参数,查看更详细的执行日志:

php artisan queue:listen --verbose

内容的提问来源于stack exchange,提问作者Martin AJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:05:15