作业失败时如何触发拉拉维尔作业失败()方法?



目前我正在使用generateReport()方法调用任务Report.php并生成报告。我已经检查了作业是否已使用 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,它应该会自动结束在failed方法中。

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

拉维尔 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
}

拉维尔 5.3+

5.3Exception会自动传递给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
}

相关内容

  • 没有找到相关文章

最新更新