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 = '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 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 = [ '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); });
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().'/logs/laravel.log', 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('query.log', false)) { BLogger::getLogger('query')->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('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 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('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 Ich möchte auch den 404-Fehler behalten:
App::missing(function($exception) { $response = [ 'status' => 0, 'error' => "请求路径错误", ]; 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!