Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung der Fehler- und Protokollverwendung im Beispiel laravel_php

Detaillierte Erläuterung der Fehler- und Protokollverwendung im Beispiel laravel_php

WBOY
Freigeben: 2016-08-17 13:02:43
Original
928 Leute haben es durchsucht

Die Beispiele in diesem Artikel beschreiben die Verwendung von Fehlern und Protokollen in Laravel. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Protokoll

Das Log-in-Laravel basiert auf einem Monolog. Laravel macht mehrere Dinge damit:

① Vereinfachte Funktionen wie addInfo in Monolog in Funktionen wie info

② Zwei Parameter hinzugefügt, useFiles und useDailyFiles, um die Protokollverwaltung und das Schneiden zu vereinfachen

③ Wenn Sie die Monolog-Methode aufrufen möchten, müssen Sie die callMonolog-Funktion

aufrufen

Okay, sehen wir uns an, wie wir die folgenden Anforderungen umsetzen:

Speichern Sie verschiedene Protokollinformationen in verschiedenen Protokollen

Diese Anforderung kommt sehr häufig vor. Beispielsweise muss das Protokoll zum Aufrufen von Bestellungen in order.log und das Protokoll zum Abrufen von Geschäftsinformationen in shop.log aufgezeichnet werden. Sie können dies tun:

<&#63;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;
  }
}

Nach dem Login kopieren

Auf diese Weise werden unterschiedliche Protokolldaten in unterschiedlichen 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, um die erforderlichen Fehlerinformationen in start/global.php aufzuzeichnen

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

Nach dem Login kopieren

Laravels Standardprotokoll verwendet keine Aufteilung

Daher sollte die Standardprotokollierung von Laravel auf standardmäßig geteilt geändert werden.

Auch in start/global.php

Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);

Nach dem Login kopieren

So zeichnen Sie das SQL-Protokoll einer Anfrage auf

Dies sollte genauer 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:

## 在filters.php中
App::after(function($request, $response)
{
  // 数据库查询进行日志
  $queries = DB::getQueryLog();
  if (Config::get('query.log', false)) {
    BLogger::getLogger('query')->info($queries);
  }
}

Nach dem Login kopieren

Wenn Sie in Echtzeit aufzeichnen müssen (dh wenn Sie irgendwo sterben, wird auch die SQL-Anfrage der vorherigen Seite aufgezeichnet), müssen Sie das illuminate.query-Ereignis abhören

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

Nach dem Login kopieren

Fehler

Alle Fehler in Laravel durchlaufen den globalen App::error und erscheinen dann

Wenn Sie beispielsweise eine Schnittstelle entwerfen und JSON-Daten auch dann zurückgeben möchten, wenn ein Fehler auftritt, können Sie Folgendes tun:

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

Nach dem Login kopieren

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

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

Nach dem Login kopieren

Leser, die an weiteren Informationen über Laravel interessiert sind, können sich die speziellen Themen auf dieser Website ansehen: „Einführung und fortgeschrittenes Tutorial zum Laravel Framework“, „Zusammenfassung des PHP Excellent Development Framework“, „Grundlegendes Tutorial zum Einstieg in Smarty Templates“. ", „Zusammenfassung der Verwendung von PHP-Datum und -Uhrzeit“, „Einführungs-Tutorial zur objektorientierten PHP-Programmierung“, „Zusammenfassung der Verwendung von PHP-Strings (Strings)“, „Einführungs-Tutorial zum PHP-MySQL-Datenbankbetrieb“ und „Zusammenfassung allgemeiner PHP-Datenbankbetriebsfähigkeiten“

Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Laravel-Framework hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage