1. Introduction
Laravel a configuré la gestion des erreurs et des exceptions pour nous par défaut. Nous déclenchons des exceptions dans la classe AppExceptionsHandler et renvoyons la réponse à l'utilisateur. Dans ce didacticiel, nous explorerons cette classe en profondeur.
De plus, Laravel intègre également la bibliothèque de journaux Monolog pour fournir une variété de processeurs de journaux puissants. Par défaut, Laravel a configuré certains processeurs pour nous. Nous pouvons choisir un seul fichier journal ou enregistrer les messages d'erreur au système. enregistrer.
2. Configuration
Affichage des détails de l'erreur
L'élément de configuration de débogage dans le fichier de configuration config/app.php contrôle le nombre de détails d'erreur affichés par le navigateur. . Par défaut, cet élément de configuration est défini via la variable d'environnement APP_DEBUG dans le fichier .env.
Pour le développement local, vous devez définir la variable d'environnement APP_DEBUG sur true. Dans un environnement de production, cette valeur doit être définie sur false. S'il est défini sur true dans un environnement de production, il est possible d'exposer certaines valeurs de configuration sensibles aux utilisateurs finaux.
Stockage des journaux
Par défaut, Laravel prend en charge les méthodes de journalisation unique, quotidienne, syslog et errorlog. Si vous souhaitez que les fichiers journaux soient générés quotidiennement au lieu de générer un seul fichier, vous devez définir la valeur du journal dans le fichier de configuration config/app.php comme suit :
'log' => 'daily '
Cycle de vie maximum des fichiers journaux
Lors de l'utilisation du mode de journalisation quotidienne, Laravel conservera jusqu'aux 5 derniers jours de journaux pour nous par défaut si vous souhaitez modifier cela. temps, vous devez ajouter un log_max_files de configuration aux fichiers de configuration de l'application :
'log_max_files' => 30
Niveau d'erreur de journal
Lors de l'utilisation de Monolog, connectez-vous les messages peuvent avoir différents niveaux d'erreur, par défaut, Laravel écrit tous les journaux dans le répertoire de stockage, mais dans un environnement de production, vous souhaiterez peut-être configurer le niveau d'erreur minimum. Cela peut être obtenu en ajoutant l'élément de configuration log_level dans l'application du fichier de configuration. .php.
Une fois cet élément de configuration configuré, Laravel enregistrera tous les journaux avec des niveaux d'erreur supérieurs ou égaux à ce niveau spécifié. Par exemple, si le niveau de journalisation par défaut est erreur, alors les niveaux d'erreur, critique, d'alerte et d'urgence. les informations du journal seront enregistrées :
'log_level' => env('APP_LOG_LEVEL', 'error'),
Remarque : Monolog prend en charge les niveaux d'erreur suivants : débogage, info, avis, avertissement, erreur, critique, alerte, urgence.
Configuration Monolog personnalisée
Si vous souhaitez contrôler entièrement la configuration Monolog dans votre application, vous pouvez utiliser la méthode configureMonologUsing. Vous devez appeler cette méthode avant que le fichier bootstrap/app.php ne renvoie la variable $app :
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...); }); return $app;
3. Gestionnaire d'exceptions
Toutes les exceptions sont gérées par la classe AppExceptionsHandler, qui contient deux méthodes : report et render. Nous détaillons ci-dessous ces deux méthodes.
méthode report
La méthode report est utilisée pour enregistrer les exceptions et les envoyer à des services externes tels que Bugsnag ou Sentry. Par défaut, la méthode report transmet simplement l'exception à la classe de base où se trouve le. l'exception est enregistrée. Bien entendu, vous pouvez également enregistrer les exceptions et les gérer selon vos propres besoins.
Par exemple, si vous devez signaler différents types d'exceptions différemment, vous pouvez utiliser l'opérateur de comparaison instanceof de PHP :
/** * 报告或记录异常 * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param \Exception $e * @return void */ public function report(Exception $e){ if ($e instanceof CustomException) { // } return parent::report($e); }
Ignorer exceptions par type
L'attribut $dontReport du gestionnaire d'exceptions contient un tableau de types d'exceptions qui ne seront pas enregistrés. Par défaut, les exceptions d'erreur 404 ne seront pas écrites dans le fichier journal. Vous pouvez en ajouter d'autres si nécessaire. . Type d'exception dans ce tableau :
/** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, \Illuminate\Validation\ValidationException::class, ];
méthode de rendu
la méthode de rendu est responsable de la conversion de l'exception donnée en HTTP envoyé au . Réponse du navigateur, par défaut, les exceptions sont transmises à la classe de base qui génère la réponse pour vous. Bien entendu, vous pouvez également vérifier le type d'exception ou renvoyer une réponse personnalisée selon vos propres besoins :
/** * 将异常渲染到HTTP响应中 * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function render($request, Exception $e){ if ($e instanceof CustomException) { return response()->view('errors.custom', [], 500); } return parent::render($request, $e); }
Exception HTTP
Certaines exceptions décrivent les codes d'erreur HTTP du serveur. Par exemple, il peut s'agir d'une erreur « Page non trouvée » (404), « Erreur d'échec d'authentification » (401) ou d'une erreur 500 causée par une erreur de programme. Afin de l'utiliser dans l'application Pour générer une telle réponse, vous pouvez utiliser la méthode abort :
abort(404);
La méthode abort lèvera immédiatement une exception qui sera rendu par le gestionnaire d'exceptions. De plus, vous pouvez fournir une description de réponse comme celle-ci :
abort(403, 'Unauthorized action.');
Cette méthode peut être utilisé à tout moment du cycle de vie de la demande.
Page d'erreur HTTP personnalisée
Dans Laravel, il est simple de renvoyer des pages d'erreur avec différents codes d'état HTTP. Par exemple, si vous souhaitez personnaliser une page d'erreur 404, créez une ressource/vue. /Erreurs/404.blade.php, ce fichier de vue est utilisé pour restituer toutes les erreurs 404 renvoyées par le programme. Il convient de noter que le nom de la vue dans ce répertoire doit correspondre au code d'état HTTP correspondant.
5. Log
Laravel fournit une simple couche d'abstraction de journaux basée sur la puissante bibliothèque Monolog. Par défaut, Laravel est configuré pour générer des journaux quotidiens pour l'application dans le stockage/journaux. répertoire. Fichier journal, vous pouvez utiliser la façade Journal pour enregistrer les informations du journal dans le journal :
<?php namespace App\Http\Controllers; use Log; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller{ /** * 显示指定用户的属性 * * @param int $id * @return Response */ public function showProfile($id) { Log::info('Showing user profile for user: '.$id); return view('user.profile', ['user' => User::findOrFail($id)]); } }
L'enregistreur fournit huit niveaux de journalisation définis dans la RFC 5424 : urgence, alerte, critique, erreur, avertissement, avis, information et débogage.
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error) ;
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
Informations contextuelles
Les données contextuelles seront également transmises à la méthode de journalisation sous la forme d'un tableau, puis formatées et affichées avec le message du journal :
Log::info( 'L'utilisateur n'a pas réussi à se connecter.', ['id' => $user->id]);
Accès à l'instance Monolog sous-jacente
Monolog dispose de plusieurs processeurs de journaux disponibles, si nécessaire, vous pouvez accéder à l'instance Monolog sous-jacente utilisée par Laravel :
$monolog = Log::getMonolog();
Plus d'erreurs de notes d'étude de Laravel 5.3 et Journaux Pour les articles connexes, veuillez faire attention au site Web PHP chinois !