新しいlaravelプロジェクトを開始するときは、必ずエラーと例外を処理する必要がありますが、それらはlaravelによってすでに設定されています。さらに、laravel は、さまざまな強力なログプロセッサを提供する Monolog ログコンポーネントライブラリも統合します。
エラー詳細
アプリケーションのブラウザによって表示されるエラー詳細のレベルは、config/app.php 設定ファイルのデバッグ オプションを通じて設定されます。デフォルトでは、この構成項目は .env ファイル内の APP_DEBUG 環境変数に従います。
ログモード
larvel は、すぐに使用できるいくつかのログモード (単一、日次、syslog、およびエラーログ) を提供します。たとえば、デフォルトの単一ファイルのログ記録方式ではなく、毎日の日付ファイルのログ記録を使用する場合です。 config/app.php 設定ファイルで log オプションの値を設定するだけです:
'log' => 'daily'
毎日のログモードを使用する場合、laravel はデフォルトで 5 日以内のログファイルのみを保持します。さらに多くのログ ファイルを保持する必要がある場合は、config/app.php ファイルに log_max_files オプションを追加する必要があります:
'log_max_files' => 30
カスタム Monolog 構成
アプリケーションで Monolog 構成を完全に制御したい場合は、アプリケーションのconfigureMonologUsingメソッドを使用できます。 bootstrap/app.php ファイル内でメソッド呼び出しを行う必要があり、$app を返す前に配置する必要があります:
$app->configureMonologUsing(function ($monolog) { $monolog->pushHandler(...); });return $app;
デフォルトでは、laravel はすべてのレベルをログに記録します。運用環境では、app.php 設定ファイルに log_level オプションを追加することで、特定のレベルのログのみを記録することができます。 Laravel は、このレベルのログとこのレベルより高いログを記録します。たとえば、log_level が error に設定されている場合、エラー、クリティカル、アラート、および緊急レベルのメッセージが記録されます。
'log_level' => app_env('APP_LOG_LEVEL', 'debug'),
すべての例外は AppExceptionsHandler クラスで処理されます。このクラスには、report と render という 2 つのメソッドが含まれています。これら 2 つの方法を詳しく分析します。
report メソッドは、例外を記録したり、BugSnag や Sentry などの他のサービスに例外を送信したりするために使用されます。デフォルトでは、レポート メソッドは単に例外を例外ログ基本クラスに渡します。実際、例外をどのようにログに記録しても構いません。
たとえば、さまざまなタイプの例外をさまざまな方法で記録したい場合は、PHP の instanceof メソッドを使用してフィルタリング操作を実行できます。
/** * Report or log an exception. * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param \Exception $e * @return void */ public function report(Exception $e) { if ($e instanceof CustomException) { // } return parent::report($e); }
タイプに基づいて例外を無視する
例外処理クラスの $dontReport 属性無視する必要がある例外クラスの配列が含まれます。この配列内の型の例外はログに記録されません。デフォルトでは、タイプ 404 のエラーはログ ファイルに記録されません。必要に応じて、無視された例外クラス名をこの配列に追加できます。
render メソッドは、例外をブラウザに返される応答情報に変換するために使用されます。デフォルトでは、例外は基本クラスに渡され、応答が返されます。実際、必要に応じて応答を自由にカスタマイズできます。
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */public function render($request, Exception $e){ if ($e instanceof CustomException) { return response()->view('errors.custom', [], 500); } return parent::render($request, $e);}
一部の例外は、サーバーから直接 HTTP エラー コードを説明します。たとえば、これは「ページが見つかりません」エラー (404)、「未承認」エラー (401)、または「開発エラー」(500) である可能性があります。アプリケーションでこのタイプの応答を迅速に生成するには、次のアプローチを使用できます:
abort(404);
abort メソッドはすぐに例外を発生させ、例外ハンドラーでレンダリングされます。このメソッドでは、オプションの応答テキストを指定することもできます:
abort(403, 'Unauthorized action.');
このメソッドは、リクエストのライフサイクルのどの時点でも使用できます。
laravel を使用すると、HTTP 応答ステータス コードに基づいてカスタム エラー ページを簡単に作成できます。たとえば、カスタム エラー ページをカスタマイズして 404 HTTP ステータス コードを提供することができます。 resoucres/views/errors/404.blade.php ファイルを作成できます。このファイルは、アプリケーションが 404 エラーをスローしたときに自動的に提供されます。
このディレクトリ内のビューの名前は、HTTP ステータス コードに対応する必要があります。
Laravel のロギング システムは、強力な Monolog クラス ライブラリに基づいています。デフォルトでは、Laravel はログファイルを保存するために storage/logs ディレクトリを設定します。ログ マスクを使用してログ情報を記録できます:
<?phpnamespace App\Http\Controllers;use Log;use App\User;use App\Http\Controllers\Controller;class UserController extends Controller { /** * Show the profile for the given user. * * @param int $id * @return Response */ public function showProfile($id) { Log::info('Showing user profile for user: ' . $id); return view('user.profile', ['user' => User:findOrFail($id)]); }}
ロガーは RFC 5424 仕様に従って 8 つのログ レベルを定義します: emergency、alert、critical、error、warning、notice 、情報、デバッグ。
Log::emergency($error);Log::alert($error);Log::critical($error);Log::error($error);Log::warning($error);Log::notice($error);Log::info($error);Log::debug($error);
コンテキスト情報
logging メソッドでコンテキスト データの配列を渡すことができます。このコンテキスト データはログ情報にフォーマットされて表示されます:
Log::info('User failed to login.', ['id' => $user->id]);
基礎となる Monolog インスタンスにアクセスします
Monolog 拥有多种额外日志处理方法。如果你需要,你可以在 laravel 中使用下面的方式访问底层的 Monolog 实例:
$monolog = Log::getMonolog();