gpt4 book ai didi

php - 作业失败时如何触发 laravel jobs failed() 方法?

转载 作者:搜寻专家 更新时间:2023-10-31 21:21:57 25 4
gpt4 key购买 nike

目前我正在调用任务 Report.php 并使用 generateReport() 方法生成报告。我已经使用 CLI 命令 php artsan queue:listen 检查了作业是否已执行。如果在调用 Artisan::call() 时出现任何问题,错误消息将显示在终端中。所以我想在 failed() 中捕获异常,并将错误记录到日志中。我尝试在 handle() 方法中使用 try catch 但它没有捕获异常。

protected $options;
public function __construct($options)
{
$this->options = array_merge(
[
'task' => 'Report',
'do' => 'generateReport',
'limit' => '10000'
],
$options
);

}
public function handle()
{
Artisan::call('execute', [
'--task' => $this->options['task'],
'--do' => $this->options['do'],
'--parameters' => $this->options,

]);

}

public function failed()
{
//
}

如何触发 failed() 并将错误记录到日志中?

最佳答案

Artisan::call 实际上只是调用 execute 控制台类,所以如果你在那里抛出一个 Exception 它应该会自动结束失败 方法。

但是,在 5.2 中,Exception 对象不会传递给失败的方法(这是在 5.3 中添加的)。

Laravel 5.2

因此,如果您需要将 Exception 对象传递给 failed 方法,那么您需要在 5.2 中执行如下操作:

public function handle()
{
try {
Artisan::call('execute', [
'--task' => $this->options['task'],
'--do' => $this->options['do'],
'--parameters' => $this->options,
]);
} catch (\Exception $e) {
$this->failed($e)
}
}

public function failed(\Exception $e = null)
{
//handle error
}

Laravel 5.3+

5.3 中,Exception 会自动传递给 failed,因此您的代码将如下所示:

public function handle()
{
Artisan::call('execute', [
'--task' => $this->options['task'],
'--do' => $this->options['do'],
'--parameters' => $this->options,
]);
}

public function failed(\Exception $e = null)
{
//handle error
}

关于php - 作业失败时如何触发 laravel jobs failed() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45582560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com