Heim  >  Artikel  >  PHP-Framework  >  Über Fehler und Protokolle in Laravel

Über Fehler und Protokolle in Laravel

藏色散人
藏色散人Original
2021-04-09 13:46:332290Durchsuche

Die folgende Tutorial-Kolumne von laravel stellt Ihnen die Fehler und Protokolle in Laravel vor (Sie können das Protokollverzeichnis und den Namen der Protokolldatei anpassen).

Über Fehler und Protokolle in Laravel

Log

Die Protokolle in Laravel sind basierend auf Monolog gekapselt. Laravel hat mehrere Dinge daran vorgenommen:

  • Vereinfachte Funktionen wie addInfo in Monolog in Funktionen wie Info
  • Zwei Parameter useFiles und useDailyFiles hinzugefügt, um die Protokollverwaltung und das Schneiden zu vereinfachen
  • Wenn Sie die Monolog-Methode aufrufen möchten, benötigen Sie um die callMonolog-Funktion aufzurufen

Okay, sehen wir uns an, wie die folgenden Anforderungen implementiert werden:

Speichern Sie verschiedene Protokollinformationen in verschiedenen Protokollen

Diese Anforderung kommt sehr häufig vor, z. B. beim Aufrufen von Bestellungen. Das Protokoll muss in order.log aufgezeichnet werden , und die Aufzeichnung des Abrufens von Geschäftsinformationen muss in shop.log aufgezeichnet werden. Sie können dies tun:

<?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;
    }
}

Auf diese Weise werden unterschiedliche Protokolldaten in verschiedenen Protokolldateien gespeichert. Es können auch Protokolldateninformationen aufgezeichnet werden.

Der Fehlerprotokollstapel von Laravel ist zu lang. Was soll ich tun?

Verwenden Sie die obige Blogger-Klasse und zeichnen Sie die erforderlichen Fehlerinformationen in start/global.php auf.

Auch in 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);
});
So zeichnen Sie das SQL-Protokoll einer Anfrage auf

Dies sollte weiter verfeinert werden und gefragt werden: Möchten Sie es in Echtzeit aufzeichnen?

Wenn Sie keine Echtzeitaufzeichnung wünschen, verfügt Laravel über DB::getQueryLog, um die durch eine App-Anfrage erhaltene SQL-Anfrage abzurufen:

Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);
Wenn Sie eine Echtzeitaufzeichnung benötigen (d. h. wenn Sie irgendwo sterben, Wenn die SQL-Anforderung der Seite ebenfalls aufgezeichnet wird, müssen Sie das illuminate.query-Ereignis abhören Wenn Sie beispielsweise eine Schnittstelle entwerfen und JSON-Daten auch dann zurückgeben möchten, wenn ein Fehler auftritt, können Sie Folgendes tun:

## 在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);
    }
}

Wenn Sie auch den 404-Fehler behalten möchten:

// 数据库实时请求的日志
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);
    });
}

Das obige ist der detaillierte Inhalt vonÜber Fehler und Protokolle in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn