2016-03-29 4 views
2

私はSentryを使用して、Laravelアプリケーションからの例外を追跡しています。Laravelに新しい例外ハンドラを追加するには、デフォルトの例外ハンドラを無効にしないでください。

歩哨の文書は、私がクライアントセットアップに自分のアプリケーションのブートストラップに次のコードを使用する必要があります言う:

$app->configureMonologUsing(function($monolog) { 
    $client = new Raven_Client('your dsn'); 
    $handler = new Monolog\Handler\RavenHandler($client); 
    $handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n")); 
    $monolog->pushHandler($handler); 
}); 

そして、それが正常に動作します!

Laravelのデフォルトの例外ハンドラは、ファイルに例外を書き込みます(/storage/logs/laravel.log)。新しい例外ハンドラの追加後に動作を停止します。

どのようにして両方のハンドラを保持できますか?

答えて

1

Illuminate\Foundation\Bootstrap\ConfigureLoggingを見ると、Laravelがネイティブログをどのように設定するのかを確認できます。

$app->configureMonologUsing(function($monolog) { 

    // Keep your existing Sentry configuration 
    $client = new Raven_Client('your dsn'); 
    $handler = new Monolog\Handler\RavenHandler($client); 
    $handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n")); 
    $monolog->pushHandler($handler); 

    // Add another handler that writes to laravel.log 
    $handler = new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log')); 
    $handler->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true)); 
    $monolog->pushHandler($handler); 

}); 

編集:

あなたはLaravelの行動正確を再現する必要がない場合は、デフォルトのフォーマッタを使用することができ、その後、独自のブートストラップには、ちょうど同じことを別のハンドラをプッシュしますワンライナーの追加のための代わりに:

$monolog->pushHandler(new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log'))); 

これは、それがのためのdefault constructor argumentsを使用しますということでネイティブLaravelの実装とは異なりではなく、明示的に設定していた

モノローグを設定するためのLaravelのロジックを再利用する第三の選択肢ではなく、このラインのほか、次のようになります。

with(new Illuminate\Log\Writer($monolog))->useFiles(storage_path('logs/laravel.log')); 
+0

私はここで探していますhttps://github.com/laravel/framework/blob/5.2/ src/Illuminate/Foundation/Bootstrap/ConfigureLogging.phpがありますが、そこには 'StreamHandler'インスタンスがありません。 –

+1

'StreamHandler'をMonologパッケージからインポートします。ソースはhttps://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/StreamHandler.phpにありますが、 Laravelの動作を再現するために 'Illuminate \ Log \ Writer'よりも深く潜り込んでください。答えのコードはうまくいくはずです。 – Nick

+0

私はもっと簡潔なものを期待していました。おそらく、フレームワークにはデフォルトのロガーを保持する方法があるはずです。しかし、あなたの誤りではなく、あなたのコードはうまくいった。ありがとうございました! –

関連する問題