2017-08-09 87 views
1

目前我正在調用任務Report.php並使用generateReport()方法生成報告。我檢查了使用CLI命令php artsan queue:listen執行了這些作業。如果在撥打Artisan::call()時出現任何問題,錯誤信息將顯示在終端中。所以我想趕上failed()的異常,我想將錯誤記錄到日誌中。 我已經嘗試try catchhandle()方法,但它沒有捕捉到例外。如何在作業失敗時觸發laravel作業失敗()方法?

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

Artisan::call實際上只是調用execute控制檯類,所以,如果你在那裏引發Exception應該在failed方法自動結束。

但是,在5.2中,Exception對象未傳遞到失敗的方法(這是在5.3中添加的)。

Laravel 5.2

所以如果你需要傳遞給failed方法Exception對象,那麼你需要做這樣的事情在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.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 
}