ホームページ >PHPフレームワーク >Laravel >Laravelのエラーとログについて

Laravelのエラーとログについて

藏色散人
藏色散人オリジナル
2021-04-09 13:46:332333ブラウズ

次のチュートリアルコラムでは、laravel のエラーとログを紹介します (ログディレクトリとログファイル名はカスタマイズできます)。

Laravelのエラーとログについて

#Log

laravel のログは monolog に基づいてカプセル化されます。 laravel はそれに対していくつかのことを行いました: monolog の addInfo などの関数を info のような関数に簡素化

useFiles と useDailyFiles の 2 つのパラメーターを追加し、ログの管理と切り取りを可能にしました。より簡単になりました。

    monolog メソッドを呼び出したい場合は、callMonolog 関数を呼び出す必要があります。
  • #それでは、次の要件を実装する方法を見てみましょう:
  • 異なるログ情報を異なるログに保存する
  • #この要件は非常に一般的です。たとえば、注文を呼び出したログは order.log に記録する必要があり、店舗情報の取得の記録は order.log に記録する必要があります。 shop.log. 行きます。これを行うことができます:
  • <?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

// 错误日志信息
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

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(&#39;query.log&#39;, false)) {
        BLogger::getLogger(&#39;query&#39;)->info($queries);
    }
}
リアルタイム記録が必要な場合 (つまり、ローカル ダイが出てくると、前のページの SQL リクエストも記録されます)、illuminate.query イベント

// 数据库实时请求的日志
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 データが返されることを期待する場合、これを実行できます:

// 错误日志信息
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 エラーを保持したい場合:

App::missing(function($exception)
{
    $response = [
        &#39;status&#39; => 0,
        &#39;error&#39; => "请求路径错误",
    ];
    return Response::json($response);
});

以上がLaravelのエラーとログについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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