【问题标题】:How to catch failed Laravel 5.7 Mail "later" queue job exception如何捕获失败的 Laravel 5.7 邮件“稍后”队列作业异常
【发布时间】:2019-03-10 07:02:13
【问题描述】:

我正在使用:Mail::later($when, $mailable); (docs)

我碰巧在我的failed_jobs 表中注意到一些条目说一些排队的邮件由于缺少视图而失败。 (docs)

但我注意到它只是运气。

认为如果排队邮件失败会发生什么情况是会抛出一个异常,然后由于我如何设置 App\Exceptions\Handler 和 @ 中的自定义记录器而通知我的 Slack 应用程序987654326@.

如何让App\Exceptions\Handler 正确报告Mail::later()Mail::queue() 的呼叫失败?

【问题讨论】:

    标签: laravel laravel-5 queue jobs


    【解决方案1】:

    我想通了

    https://laravel.com/docs/5.7/queues#failed-job-events 向我展示了我可以编辑App\Providers\AppServiceProviderboot 函数以具有:

    Queue::failing(function (JobFailed $event) {
        Log::error('JobFailed. ' . json_encode(['connectionName' => $event->connectionName, 'job' => $event->job, 'exception' => $event->exception])); 
    });
    

    为了测试这在本地是否有效,我在本地 .env 中设置了 QUEUE_DRIVER=sync,然后运行 ​​php artisan queue:work --tries=1 --daemon > storage/logs/laravel.log

    它成功记录了来自Mail::later 的异常。

    但是请注意,laravel.log 并没有立即更新;有大约一分钟的延迟。

    【讨论】:

    • 感谢您的展示。我已经在App\Providers\AppServiceProvider中使用了Queue::failing(),但是没有想到--daemon > storage/logs/laravel.log。然而,这似乎只适用于内部 laravel 和 php 异常。错误配置的邮件似乎默默地失败了。我忘记为MAIL_HOST 更改我的GMAIL 配置,而Queue::failing() 从未发现它。所以我想知道--daemon > storage/logs/laravel.log 是否会有所作为。我已经在 Mac OSx 中安装了 redis,我会试试看。
    【解决方案2】:

    您可以使用包含失败作业列表的失败作业表。

    【讨论】:

    • 我的问题的第二句话已经说failed_jobs 表是如何我第一次碰巧注意到失败。但我想知道一种立即收到警报的方法。
    猜你喜欢
    • 2021-01-05
    • 2019-07-17
    • 2014-11-19
    • 2019-05-29
    • 2014-06-23
    • 2019-12-20
    • 2018-08-16
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多