Le contenu de cet article est de partager avec vous l'analyse de la façon de personnaliser le comportement des journaux dans Laravel5.5. Le contenu est très détaillé et a une certaine valeur de référence. J'espère qu'il pourra aider les amis dans le besoin.
Dans la version Laravel 5.6, le comportement des journaux peut être facilement personnalisé, tandis que dans les versions inférieures à 5.5, le degré de liberté dans la personnalisation du comportement des journaux n'est pas très élevé, mais si le projet a des besoins, il ne peut pas l'être forcé à cause de cela. Mettez à niveau le projet vers la version 5.6. De plus, en tant que projet stable, la mise à niveau du framework vers une version volumineuse peut présenter de nombreux pièges. Pour ces raisons, j'ai essayé de transformer les logs de Laravel 5.5 en fonction de mes besoins.
Le comportement de journalisation de Laravel est principalement dans IlluminateLogLogServiceProvider. Nous pouvons jeter un œil aux extraits de code :
/** * Configure the Monolog handlers for the application. * * @param \Illuminate\Log\Writer $log * @return void */ protected function configureDailyHandler(Writer $log) { $log->useDailyFiles( $this->app->storagePath().'/logs/laravel.log', $this->maxFiles(), $this->logLevel() ); }
C'est la méthode de stockage des journaux que j'utilise le plus souvent dans les projets. que le chemin de stockage du journal est presque codé en dur et ne peut pas être facilement modifié via des paramètres externes.
Au début, j'ai pensé à réécrire ce Provider et à l'enregistrer dans le tableau des fournisseurs de app.php, mais ce comportement n'est pas réalisable car en regardant le code source, LogServiceProvider est enregistré au démarrage du framework.
Il existe une telle méthode qui contrôle ce comportement d'enregistrement :
protected function registerBaseServiceProviders() { $this->register(new EventServiceProvider($this)); $this->register(new LogServiceProvider($this)); $this->register(new RoutingServiceProvider($this)); }
Maintenant que nous savons comment elles prennent effet, nous allons hériter de ces deux classes et modifier le comportement que nous devons changer. Ma méthode de transformation est la suivante. Créez une nouvelle classe LogServiceProvider dans appProviders et héritez d'IlluminateLogLogServiceProvider. Le code est le suivant :
<?php namespace App\Providers; use Illuminate\Log\LogServiceProvider as BaseLogServiceProvider; use Illuminate\Log\Writer; class LogServiceProvider extends BaseLogServiceProvider { /** * Configure the Monolog handlers for the application. * * @param \Illuminate\Log\Writer $log * @return void */ protected function configureDailyHandler(Writer $log) { $path = config('app.log_path'); $log->useDailyFiles( $path, $this->maxFiles(), $this->logLevel() ); } }
Ajoutez la configuration dans le répertoire config/app.php :
'log_path' => env('APP_LOG_PATH', storage_path('/logs/laravel.log')),
<?php /** * Created by PhpStorm. * User: dongyuxiang * Date: 2018/7/31 * Time: 16:53 */ namespace App\Foundation; use App\Providers\LogServiceProvider; use Illuminate\Events\EventServiceProvider; use Illuminate\Routing\RoutingServiceProvider; use Illuminate\Foundation\Application as BaseApplication; class Application extends BaseApplication { /** * Register all of the base service providers. * * @return void */ protected function registerBaseServiceProviders() { $this->register(new EventServiceProvider($this)); $this->register(new LogServiceProvider($this)); $this->register(new RoutingServiceProvider($this)); } }
$app = new App\Foundation\Application( realpath(__DIR__.'/../') );
Explication détaillée des exemples de journaux d'erreurs personnalisés php
Journal d'écriture de fichier journal personnalisé Yii2
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!