1. はじめに
Laravel はデフォルトで、AppExceptionsHandler クラスで例外をトリガーし、ユーザーに応答を返します。このチュートリアルでは、このクラスを詳しく見ていきます。
さらに、Laravel は Monolog ログ ライブラリも統合し、さまざまな強力なログ プロセッサを提供します。デフォルトで、Laravel は単一のログ ファイルを選択するか、システム ログにエラー情報を記録することができます。
2.
エラー詳細表示を構成する
構成ファイル config/app.php のデバッグ構成項目は、ブラウザーによって表示されるエラー詳細の数を制御します。デフォルトでは、この構成項目は .env ファイル内の環境変数 APP_DEBUG を通じて設定されます。
ローカル開発の場合は、環境変数 APP_DEBUG を true に設定する必要があります。運用環境では、この値を false に設定する必要があります。運用環境で true に設定すると、一部の機密構成値がエンド ユーザーに公開される可能性があります。
ログストレージ
デフォルトでは、Laravel は単一、毎日、syslog、およびエラーログのログメソッドをサポートしています。単一のファイルを生成するのではなく、ログ ファイルを毎日生成したい場合は、構成ファイル config/app.php でログ値を次のように設定する必要があります:
'log' => 'daily'
ログファイルの最大ライフサイクル
日次ログモードを使用する場合、Laravel はデフォルトで過去 5 日間のログを保持します。今回変更したい場合は、アプリ設定ファイルに設定 log_max_files を追加する必要があります:
' log_max_files' => 30
ログエラーレベル
Monologを使用する場合、デフォルトでは、Laravelはすべてのログをストレージディレクトリに書き込みますが、運用環境では、最小値を設定することをお勧めします。これは、設定ファイル app.php に設定項目 log_level を追加することで実現できます。
この設定項目が設定されると、Laravel は、この指定されたレベル以上のエラー レベルを持つすべてのログを記録します。たとえば、デフォルトの log_level が error の場合、エラー、クリティカル、アラート、および緊急レベルのログ情報が記録されます。記録:
'log_level ' => env('APP_LOG_LEVEL', 'error'),
注: Monolog は、デバッグ、情報、通知、警告、エラー、クリティカル、アラート、緊急のエラー レベルをサポートしています。
カスタマイズされた Monolog 構成
アプリケーションで Monolog 構成を完全に制御したい場合は、configureMonologUsing メソッドを使用できます。 bootstrap/app.php ファイルが $app 変数を返す前に、このメソッドを呼び出す必要があります:
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...); }); return $app;
3. 例外ハンドラー
すべての例外は、report と 2 つのメソッドを含む AppExceptionsHandler クラスによって処理されます。与える。以下では、これら 2 つの方法について詳しく説明します。
レポート メソッド
レポート メソッドは、例外を記録し、それらを Bugsnag や Sentry などの外部サービスに送信するために使用されます。もちろん、レポート メソッドは、例外が記録される基本クラスに例外を渡すだけです。独自のニーズに応じて例外を記録し、それに応じて処理することもできます。
たとえば、異なるタイプの例外を異なる方法で報告する必要がある場合は、PHP の instanceof 比較演算子を使用できます:
/** * 报告或记录异常 * * 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 メソッドは、定義された例外を提供します。デフォルトでは、例外は応答を生成する基本クラスに渡されます。もちろん、独自のニーズに応じて例外タイプを確認したり、カスタム応答を返すこともできます。
/** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, \Illuminate\Validation\ValidationException::class, ];
4. HTTP 例外
一部の例外は、サーバーからの HTTP エラー コードを説明します。 「ページが見つかりません」エラー (404)、「認証失敗エラー」(401)、またはプログラム エラーが原因の 500 エラーのいずれかです。アプリケーションでそのような応答を生成するには、abort メソッドを使用します:
。 abort(404);
abort メソッドは、例外ハンドラーによってレンダリングされる例外を直ちに発生させます:
abort(403, 'Unauthorized action.') のような応答の説明を指定することもできます。 ;
このメソッドは、リクエストのライフサイクルのどの時点でも使用できます。
カスタム HTTP エラー ページ
Laravel では、さまざまな HTTP ステータス コードを含むエラー ページを返すのは簡単です。たとえば、404 エラー ページをカスタマイズしたい場合は、 resource/views/errors/404.blade.php ファイルを作成します。このビュー ファイルは、プログラムから返されるすべての 404 エラーをレンダリングするために使用されます。このディレクトリ内のビューの名前は、対応する HTTP ステータス コードと一致する必要があることに注意してください。
5. Log
Laravel は、強力な Monolog ライブラリに基づいたシンプルなログ抽象化レイヤーを提供します。デフォルトでは、Laravel は storage/logs ディレクトリに毎日ログ ファイルを生成するように設定されています。ログに情報を記録します:
/** * 将异常渲染到HTTP响应中 * * @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); }
ロガーは、RFC 5424 で定義されている 8 つのログ レベル (緊急、アラート、クリティカル、エラー、警告、通知、情報、デバッグ) を提供します。
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error) ;
Log::notice($error);
Log::info($error);
Log::debug($error);
コンテキスト情報
コンテキストデータは、配列の形式でフォーマットされ、ログ メッセージとともに表示されます:
Log::info('ユーザーはログインに失敗しました。', ['id' => $user->id]);
基礎となる Monolog インスタンスへのアクセス
Monolog には、ロギングに使用できる複数のプロセッサーがあり、必要に応じて、Laravel によって使用される基礎となる Monolog インスタンスにアクセスできます。 5.3 Study Notes のエラーとログ 関連記事については、PHP 中国語 Web サイトに注目してください。