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
WBOYOriginal
2016-08-17 13:02:43923Durchsuche

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

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

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);

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

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

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

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

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

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.

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