ホームページ  >  記事  >  php教程  >  Laravel 5.3 スタディノートのエラーとログ

Laravel 5.3 スタディノートのエラーとログ

高洛峰
高洛峰オリジナル
2016-12-22 15:56:451063ブラウズ

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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。