La colonne tutorielle suivante de laravel vous présentera les erreurs et les journaux dans laravel (vous pouvez personnaliser le répertoire des journaux et le nom du fichier journal, j'espère que cela vous sera utile). aux amis dans le besoin !
Journal
La connexion dans Laravel est encapsulée sur la base d'un monologue. Laravel a fait plusieurs choses dessus :
D'accord, voyons comment implémenter les exigences suivantes :
Cette exigence est très courante. Par exemple, le journal d'appel d'une commande doit être enregistré dans order.log et l'enregistrement d'obtention d'informations sur le magasin doit être enregistré. dans shop.log, allez. 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.
Utilisez la classe Blogger ci-dessus et enregistrez 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'utilise pas la segmentation
La journalisation par défaut de Laravel doit donc être modifiée pour être divisée 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
Cela devrait être Hua a demandé plus en détail, souhaitez-vous enregistrer en temps réel ?
Si vous ne voulez 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'un enregistrement en temps réel ( c'est-à-dire que vous êtes dans n'importe quel Lorsque le dé local sort, la requête SQL de la page précédente est également enregistrée), vous devez surveiller 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
laravel Toutes les erreurs passeront par l'erreur globale App::error puis apparaîtront
Donc par exemple, si vous concevez une interface et espérez que les données json seront renvoyées même en cas d'erreur se produit, vous pouvez faire ceci :
// 错误日志信息 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 souhaitez toujours conserver l'erreur 404 :
App::missing(function($exception) { $response = [ 'status' => 0, 'error' => "请求路径错误", ]; return Response::json($response); });
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!