この記事の例では、laravel でのエラーとログの使用方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
ログ
laravelのログはmonologに基づいてカプセル化されています。 Laravel はそれに対していくつかのことを行いました:
① monolog の addInfo などの関数を info などの関数に簡略化しました
② useFiles と useDailyFiles の 2 つのパラメーターを追加し、ログ管理とカットを容易にしました
③ monolog メソッドを呼び出したい場合、callMonolog 関数を呼び出す必要があります
それでは、次の要件を実装する方法を見てみましょう:
異なるログ情報を異なるログに保存する
この要件は、呼び出しなど、非常に一般的です注文ログは順番に記録される必要があります.logに店舗情報を取得した記録をshop.logに記録する必要があります。これを行うことができます:
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; use Illuminate\Log\Writer; class BLogger { // 所有的LOG都要求在这里注册 const LOG_ERROR = 'error'; 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().'/logs/'. $type .'.log', $day); } $log = self::$loggers[$type]; return $log; } }
このようにして、異なるログ データが異なるログ ファイルに保存されます。ログデータ情報も記録できます。
Laravel のエラーログスタックが長すぎるのですが、どうすればよいですか?
上記の Blogger クラスを使用し、必要なエラー情報を start/global.php に記録します
// 错误日志信息 App::error(function(Exception $exception, $code) { Log::error($exception); $err = [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'code' => $exception->getCode(), 'url' => Request::url(), 'input' => Input::all(), ]; BLogger::getLogger(BLogger::LOG_ERROR)->error($err); });
Laravel のデフォルトのログはセグメンテーションを使用しません
そのため、laravel のデフォルトのログはデフォルトでセグメンテーションに変更する必要があります。
start/global.phpにもあります
Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);
リクエストのSQLログを記録する方法
これをリアルタイムで記録しますか?
リアルタイム記録が必要ない場合、laravel にはアプリリクエストによって取得された SQL リクエストを取得するための DB::getQueryLog があります:
## 在filters.php中 App::after(function($request, $response) { // 数据库查询进行日志 $queries = DB::getQueryLog(); if (Config::get('query.log', false)) { BLogger::getLogger('query')->info($queries); } }
リアルタイム記録が必要な場合 (つまり、いつでも死ぬことができます。前のページの SQL リクエストも記録されます)、illuminate.query イベントをリッスンする必要があります
// 数据库实时请求的日志 if (Config::get('database.log', false)) { Event::listen('illuminate.query', function($query, $bindings, $time, $name) { $data = compact('query','bindings', 'time', 'name'); BLogger::getLogger(BLogger::LOG_QUERY_REAL_TIME)->info($data); }); }
Error
laravel のすべてのエラーは、すべてグローバル App::error を通過しますたとえば、インターフェースを設計していて、エラーが発生した場合でも JSON データを返したい場合は、次のようにすることができます:
// 错误日志信息 App::error(function(Exception $exception, $code) { // 如果没有路径就直接跳转到登录页面 if ($exception instanceof NotFoundHttpException) { return Redirect::route('login'); } Log::error($exception); $err = [ 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'code' => $exception->getCode(), 'url' => Request::url(), 'input' => Input::all(), ]; BLogger::getLogger(BLogger::LOG_ERROR)->error($err); $response = [ 'status' => 0, 'error' => "服务器内部错误", ]; return Response::json($response); });
404 エラーも保持したい場合:
App::missing(function($exception) { $response = [ 'status' => 0, 'error' => "请求路径错误", ]; return Response::json($response); });
この記事が、Laravel フレームワークに基づいた PHP プログラミングを行うすべての人に役立つことを願っています。
laravel でのエラーとログの使用方法の詳細な説明については、PHP 中国語 Web サイトに注目してください。