Heim  >  Artikel  >  php教程  >  Detaillierte Erklärung der Fehler- und Protokollverwendung in Laravel

Detaillierte Erklärung der Fehler- und Protokollverwendung in Laravel

高洛峰
高洛峰Original
2016-12-23 17:21:341371Durchsuche

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 Protokoll in Laravel ist basierend auf Monolog gekapselt. Laravel hat mehrere Dinge daran vorgenommen:

① Vereinfachte Funktionen wie addInfo in monolog in Funktionen wie info

② Zwei Parameter hinzugefügt, useFiles und useDailyFiles, um die Protokollierung zu ermöglichen. Verwaltung und Schneiden sind einfacher geworden

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

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

wird anders sein Protokollinformationen werden in verschiedenen Protokollen gespeichert.

Diese Anforderung ist sehr häufig. Beispielsweise muss das Protokoll über den Aufruf von Bestellungen in order.log aufgezeichnet werden, und die Aufzeichnung über den Erhalt von Geschäftsinformationen muss im Shop aufgezeichnet werden. Protokoll. 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, um die erforderlichen Fehlerinformationen in start/global.php aufzuzeichnen.

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

Das Standardprotokoll von Laravel existiert nicht Verwenden Sie die Aufteilung

, sodass die Standardprotokollierung von Laravel standardmäßig in „Aufteilung“ geändert werden sollte.

Auch in start/global.php

Log::useDailyFiles(storage_path().&#39;/logs/laravel.log&#39;, 30);

So zeichnen Sie das SQL-Protokoll einer Anfrage auf

Dies Um genauer zu fragen: Möchten Sie in Echtzeit aufnehmen?

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(&#39;query.log&#39;, false)) {
    BLogger::getLogger(&#39;query&#39;)->info($queries);
  }
}

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

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

Fehler

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

Also zum Beispiel, wenn Wenn Sie eine Schnittstelle entwerfen, hoffe ich, dass Sie Folgendes tun können, auch wenn ein Fehler auftritt und JSON-Daten zurückgegeben werden:

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

Wenn Sie Ich möchte auch den 404-Fehler behalten:

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

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

Ausführlichere Erklärungen zu Fehlern und Protokollverwendung in Laravel finden Sie auf der chinesischen PHP-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