ホームページ > php教程 > PHP开发 > laravelのエラーとログの使い方を詳しく解説

laravelのエラーとログの使い方を詳しく解説

高洛峰
リリース: 2016-12-23 17:21:34
オリジナル
1449 人が閲覧しました

この記事の例では、laravel でのエラーとログの使用方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

ログ

laravelのログはmonologに基づいてカプセル化されています。 Laravel はそれに対していくつかのことを行いました:

① monolog の addInfo などの関数を info などの関数に簡略化しました

② useFiles と useDailyFiles の 2 つのパラメーターを追加し、ログ管理とカットを容易にしました

③ monolog メソッドを呼び出したい場合、callMonolog 関数を呼び出す必要があります

それでは、次の要件を実装する方法を見てみましょう:

異なるログ情報を異なるログに保存する

この要件は、呼び出しなど、非常に一般的です注文ログは順番に記録される必要があります.logに店舗情報を取得した記録をshop.logに記録する必要があります。これを行うことができます:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

use Illuminate\Log\Writer;

class BLogger

{

  // 所有的LOG都要求在这里注册

  const LOG_ERROR = &#39;error&#39;;

  private static $loggers = array();

  // 获取一个实例

  public static function getLogger($type = self::LOG_ERROR, $day = 30)

  {

    if (empty(self::$loggers[$type])) {

      self::$loggers[$type] = new Writer(new Logger($type));

      self::$loggers[$type]->useDailyFiles(storage_path().&#39;/logs/&#39;. $type .&#39;.log&#39;, $day);

    }

    $log = self::$loggers[$type];

    return $log;

  }

}

ログイン後にコピー

このようにして、異なるログ データが異なるログ ファイルに保存されます。ログデータ情報も記録できます。

Laravel のエラーログスタックが長すぎるのですが、どうすればよいですか?

上記の Blogger クラスを使用し、必要なエラー情報を start/global.php に記録します

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 错误日志信息

App::error(function(Exception $exception, $code)

{

  Log::error($exception);

  $err = [

    &#39;message&#39; => $exception->getMessage(),

    &#39;file&#39; => $exception->getFile(),

    &#39;line&#39; => $exception->getLine(),

    &#39;code&#39; => $exception->getCode(),

    &#39;url&#39; => Request::url(),

    &#39;input&#39; => Input::all(),

  ];

  BLogger::getLogger(BLogger::LOG_ERROR)->error($err);

});

ログイン後にコピー

Laravel のデフォルトのログはセグメンテーションを使用しません

そのため、laravel のデフォルトのログはデフォルトでセグメンテーションに変更する必要があります。

start/global.phpにもあります

1

Log::useDailyFiles(storage_path().&#39;/logs/laravel.log&#39;, 30);

ログイン後にコピー

リクエストのSQLログを記録する方法

これをリアルタイムで記録しますか?

リアルタイム記録が必要ない場合、laravel にはアプリリクエストによって取得された SQL リクエストを取得するための DB::getQueryLog があります:

1

2

3

4

5

6

7

8

9

## 在filters.php中

App::after(function($request, $response)

{

  // 数据库查询进行日志

  $queries = DB::getQueryLog();

  if (Config::get(&#39;query.log&#39;, false)) {

    BLogger::getLogger(&#39;query&#39;)->info($queries);

  }

}

ログイン後にコピー

リアルタイム記録が必要な場合 (つまり、いつでも死ぬことができます。前のページの SQL リクエストも記録されます)、illuminate.query イベントをリッスンする必要があります

1

2

3

4

5

6

7

8

9

// 数据库实时请求的日志

if (Config::get(&#39;database.log&#39;, false))

{

  Event::listen(&#39;illuminate.query&#39;, function($query, $bindings, $time, $name)

  {

    $data = compact(&#39;query&#39;,&#39;bindings&#39;, &#39;time&#39;, &#39;name&#39;);

    BLogger::getLogger(BLogger::LOG_QUERY_REAL_TIME)->info($data);

  });

}

ログイン後にコピー

Error

laravel のすべてのエラーは、すべてグローバル App::error を通過しますたとえば、インターフェースを設計していて、エラーが発生した場合でも JSON データを返したい場合は、次のようにすることができます:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

// 错误日志信息

App::error(function(Exception $exception, $code)

{

  // 如果没有路径就直接跳转到登录页面

  if ($exception instanceof NotFoundHttpException) {

    return Redirect::route(&#39;login&#39;);

  }

  Log::error($exception);

  $err = [

    &#39;message&#39; => $exception->getMessage(),

    &#39;file&#39; => $exception->getFile(),

    &#39;line&#39; => $exception->getLine(),

    &#39;code&#39; => $exception->getCode(),

    &#39;url&#39; => Request::url(),

    &#39;input&#39; => Input::all(),

  ];

  BLogger::getLogger(BLogger::LOG_ERROR)->error($err);

  $response = [

    &#39;status&#39; => 0,

    &#39;error&#39; => "服务器内部错误",

  ];

  return Response::json($response);

});

ログイン後にコピー

404 エラーも保持したい場合:

1

2

3

4

5

6

7

8

App::missing(function($exception)

{

  $response = [

    &#39;status&#39; => 0,

    &#39;error&#39; => "请求路径错误",

  ];

  return Response::json($response);

});

ログイン後にコピー

この記事が、Laravel フレームワークに基づいた PHP プログラミングを行うすべての人に役立つことを願っています。

laravel でのエラーとログの使用方法の詳細な説明については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート