Les exemples de cet article décrivent l'utilisation des erreurs et des journaux dans Laravel. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Journal
La connexion dans Laravel est encapsulée sur la base d'un monologue. Laravel a fait plusieurs choses dessus :
① Fonctions simplifiées telles que addInfo dans le monologue en fonctions comme info
② Ajout de deux paramètres, useFiles et useDailyFiles, pour activer la journalisation. La gestion et la découpe sont devenues plus faciles
③ Si vous souhaitez appeler la méthode monologue, vous devez appeler la fonction callMonolog
D'accord, voyons comment implémenter les exigences suivantes :
sera différent Le les informations du journal sont stockées dans différents journaux
Cette exigence est très courante. Par exemple, le journal des commandes d'appel doit être enregistré dans order.log et l'enregistrement de l'obtention des informations sur le magasin doit être enregistré dans la boutique. enregistrer. Vous pouvez faire ceci :
<?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; } }
De cette façon, différentes données de journal seront stockées dans différents fichiers journaux. Les informations sur les données du journal peuvent également être enregistrées.
La pile du journal des erreurs de Laravel est trop longue, que dois-je faire ?
Utilisez la classe Blogger ci-dessus pour enregistrer les informations d'erreur nécessaires dans start/global.php
// 错误日志信息 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); });
Le journal par défaut de Laravel n'existe pas Utilisez le fractionnement
pour que la journalisation par défaut de Laravel soit modifiée en fractionnement par défaut.
Également dans start/global.php
Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);
Comment enregistrer le journal SQL d'une requête
Ceci devrait Pour demander plus attentivement, souhaitez-vous enregistrer en temps réel ?
Si vous ne souhaitez pas d'enregistrement en temps réel, alors laravel a DB::getQueryLog pour obtenir la requête SQL obtenue par une requête d'application :
## 在filters.php中 App::after(function($request, $response) { // 数据库查询进行日志 $queries = DB::getQueryLog(); if (Config::get('query.log', false)) { BLogger::getLogger('query')->info($queries); } }
Si vous avez besoin d'enregistrer en temps réel (c'est-à-dire que lorsque vous mourez n'importe où, la requête SQL de la page précédente est également enregistrée), vous devez écouter l'événement illuminate.query
// 数据库实时请求的日志 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); }); }
Erreur
Toutes les erreurs dans Laravel passeront par l'erreur globale App::error puis réapparaîtront
Donc par exemple, si vous concevez une interface, j'espère que même s'il y en a Si une erreur se produit et que des données json sont renvoyées, vous pouvez le faire :
// 错误日志信息 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); });
Si vous Je souhaite également conserver l'erreur 404 :
App::missing(function($exception) { $response = [ 'status' => 0, 'error' => "请求路径错误", ]; return Response::json($response); });
J'espère que cet article sera utile à la conception de programmes PHP de chacun basé sur le framework Laravel.
Pour des explications plus détaillées sur les erreurs et l'utilisation des journaux dans Laravel, veuillez faire attention au site Web PHP chinois !