目前我正在使用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.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
}