Maison >cadre php >Laravel >Comment personnaliser l'analyse du comportement des journaux dans Laravel5.5

Comment personnaliser l'analyse du comportement des journaux dans Laravel5.5

不言
不言original
2018-08-02 17:32:033170parcourir

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(&#39;app.log_path&#39;);
  $log->useDailyFiles(
   $path, $this->maxFiles(),
   $this->logLevel()
  );
 }
}

Ajoutez la configuration dans le répertoire config/app.php :

&#39;log_path&#39; => env(&#39;APP_LOG_PATH&#39;, storage_path(&#39;/logs/laravel.log&#39;)),
<.>répertoire app Créez un nouveau répertoire Foundation, créez une nouvelle classe Application qui hérite de la classe IlluminateFoundationApplication et remplacez la méthode registerBaseServiceProviders.

<?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));
 }
}
On dit qu'il est réécrit. En fait, cela change simplement la classe d'utilisation du LogServiceProvider que nous avons créé nous-mêmes.

Puis dans bootstrapapp.php, remplacez le nouvel objet de la variable $app par celui dont nous avons hérité et réécrit.

$app = new App\Foundation\Application(
 realpath(__DIR__.&#39;/../&#39;)
);
De cette façon, j'ai réussi à définir le chemin du journal avec désinvolture, et avec cette expérience, je peux optimiser davantage les domaines dans lesquels le framework ne répond pas à mes besoins, et je ne l'ai pas fait. modifié le code sous-jacent du framework. Lorsque le framework contient des corrections de bugs, je peux mettre à jour le framework en toute sécurité.

Articles connexes recommandés :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn