目前我正在调用任务Report.php
并使用generateReport()
方法生成报告。我已使用CLI命令php artsan queue:listen
检查了作业是否已执行。如果在调用Artisan::call()
时出现任何问题,将在终端中显示错误消息。所以我想在failed()
中捕获异常并且我想将错误记录到日志中。
我在try catch
方法中尝试使用handle()
,但它没有捕获异常。
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()
并将错误记录到日志中?
答案 0 :(得分:1)
Artisan::call
实际上只是调用execute
控制台类,所以如果你在其中抛出Exception
,它应该自动以failed
方法结束。
但是,在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
}