2017-08-09 6 views
1

現在、Report.phpというタスクを呼び出し、generateReport()メソッドを使用してレポートを生成しています。 CLIコマンドphp artsan queue:listenを使用してジョブが実行されていることを確認しました。 Artisan::call()を呼び出して何か問題が発生した場合は、端末にエラーメッセージが表示されます。だから私はfailed()の例外をキャッチしたいと思うし、ログにエラーを記録したい。 メソッドでtry catchを試しましたが、例外をキャッチしていません。ジョブが失敗した場合、laravel jobs failed()メソッドをトリガする方法はありますか?

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は実際にあなたがそこにExceptionを投げるので、もしそれが自動的にfailed方法で終わる必要がありexecuteコンソールクラスを呼び出しています。

しかし、5.2Exceptionオブジェクト(これは5.3添加した)障害が発生したメソッドに渡されません。

Laravel 5.2

あなたはfailedメソッドに渡されたExceptionオブジェクトを必要とするのであれば、あなたは5.2にこのような何かをする必要があります。5.3+

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の場合、Exceptionは自動的に01に渡されますですので、コードは次のようになります:

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 
} 
関連する問題