2016-04-15 12 views
1

私はErrbitサーバにその例外を送信するLaravelアプリケーションを持っています。ここでLaravel Artisanの例外がエラー報告に送信されないようにする

は、例外ハンドラのコードです:

<?php 

namespace App\Exceptions; 

use Exception; 
use Illuminate\Session\TokenMismatchException; 
use Illuminate\Auth\Access\AuthorizationException; 
use Illuminate\Database\Eloquent\ModelNotFoundException; 
use Symfony\Component\HttpKernel\Exception\HttpException; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 
use Illuminate\Foundation\Validation\ValidationException; 
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; 

use Airbrake\Notifier; 

class Handler extends ExceptionHandler 
{ 
    protected $dontReport = [ 
     AuthorizationException::class, 
     HttpException::class, 
     ModelNotFoundException::class, 
     ValidationException::class, 
     TokenMismatchException::class, 
    ]; 

    public function report(Exception $e) 
    { 
     if ($this->shouldReport($e)) { 
      $options = [ 
       'environment'  => app()->environment(), 
       'host'   => config('airbrake.server'), 
       'projectId'  => config('airbrake.api_key'), 
       'projectKey'  => config('airbrake.api_key'), 
       'rootDirectory' => base_path(), 
       'secure'   => TRUE, 
       'url'    => request()->fullUrl(), 
      ]; 

      $notifier = new Notifier($options); 
      $notifier->notify($e); 
     } 

     return parent::report($e); 
    } 

    public function render($request, Exception $e) 
    { 
     // Replace `ModelNotFound` with 404. 
     if ($e instanceof ModelNotFoundException) { 
      $message = 'Page not found'; 
      if (config('app.debug')) { 
       $message = $e->getMessage(); 
      } 
      $e = new NotFoundHttpException($message, $e); 
     } 

     $response = parent::render($request, $e); 

     return $response; 
    } 
} 

これは、一般的には本当によく動作しますが、私は職人のコマンドを実行したときに起こるログエラーを回避したいです。ロギングエラーの全体的なポイントには問題が通知されますが、私がコンソールに座っているなら、私はすでに問題について知っています。

私は職人が存在するかどうかを確認するためにスタックトレースを見ていると思ったが、私はそれには二つの問題を参照してください:それは非常に効率的なもののような音はありませんやって

  • キューリスナーも職人によって運営されています。実際にはコンソールから実行されていないため、例外を取得する必要があります。

コンソールから実行されるすべての例外の例外レポートをスキップすることはできますが、他のすべての例外についてはそれを維持しますか?実際artisanのコマンドを実行します

答えて

0

Illuminate\Foundation\Console\Kernelクラスは、あなたのExceptionHandlerさんがreportメソッドを呼び出す機能reportExceptionを持っています。

私はSTDINが対話型端末で、エラー報告を無効にするかどうかを確認する私のKernelクラスにそのメソッドのオーバーライドを追加しました:

protected function reportException(Exception $e) 
{ 
    // Disable exception reporting if run from the console. 
    if (function_exists('posix_isatty') && @posix_isatty(STDIN)) { 
     echo "Not sending exception report"; 
     return; 
    } 

    parent::reportException($e); 
} 
関連する問題