簡體   English   中英

如何在作業失敗時觸發laravel jobs failed()方法?

[英]How to trigger laravel jobs failed() method when job fails?

目前我正在調用任務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 ,它應該自動以failed方法結束。

但是,在5.2Exception對象不會傳遞給失敗的方法(這是在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.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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM