Heim >PHP-Framework >Laravel >So passen Sie die Analyse des Protokollverhaltens in Laravel5.5 an

So passen Sie die Analyse des Protokollverhaltens in Laravel5.5 an

不言
不言Original
2018-08-02 17:32:033172Durchsuche

Der Inhalt dieses Artikels besteht darin, die Analyse zum Anpassen des Protokollverhaltens in Laravel5.5 mit Ihnen zu teilen. Der Inhalt ist sehr detailliert und hat einen gewissen Referenzwert.

In der Laravel 5.6-Version kann das Protokollverhalten einfach angepasst werden, während in Versionen unter 5.5 der Freiheitsgrad beim Anpassen des Protokollverhaltens nicht sehr hoch ist, aber wenn das Projekt Anforderungen hat, kann dies nicht der Fall sein Aus diesem Grund ist es erzwungen, das Projekt auf 5.6 zu aktualisieren. Da es sich um ein stabiles Projekt handelt, kann es viele Fallstricke geben. Aus diesen Gründen habe ich versucht, die Protokolle von Laravel 5.5 an meine Bedürfnisse anzupassen.

Der größte Teil des Protokollierungsverhaltens von Laravel findet in IlluminateLogLogServiceProvider statt:

/**
 * 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()
 );
}

Dies ist die Protokollspeichermethode, die ich in Projekten am häufigsten verwende, wie Sie sehen können Der Speicherpfad des Protokolls ist nahezu fest codiert und kann nicht einfach durch externe Parameter geändert werden.

Zuerst habe ich darüber nachgedacht, diesen Provider neu zu schreiben und ihn im Provider-Array von app.php zu registrieren, aber dieses Verhalten ist nicht machbar, da LogServiceProvider beim Start des Frameworks registriert wird, wenn man sich den Quellcode ansieht.

Es gibt eine Methode, die dieses Registrierungsverhalten steuert:

protected function registerBaseServiceProviders()
{
 $this->register(new EventServiceProvider($this));

 $this->register(new LogServiceProvider($this));

 $this->register(new RoutingServiceProvider($this));
}

Da wir nun wissen, wie sie wirksam werden, werden wir diese beiden Klassen erben und sie ändern. Wir brauchen Um das Verhalten zu ändern, transformiere ich, und meine Transformationsmethode ist wie folgt. Erstellen Sie eine neue LogServiceProvider-Klasse in appProviders und erben Sie IlluminateLogLogServiceProvider. Der Code lautet wie folgt:

<?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()
  );
 }
}

Konfiguration im Verzeichnis config/app.php hinzufügen:

&#39;log_path&#39; => env(&#39;APP_LOG_PATH&#39;, storage_path(&#39;/logs/laravel.log&#39;)),

Erstellen Sie eine neues Foundation-Verzeichnis im App-Verzeichnis. Die neue Application-Klasse erbt die IlluminateFoundationApplication-Klasse und überschreibt die Methode 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));
 }
}

Es wird gesagt, dass es neu geschrieben wurde. Tatsächlich ändert es nur die Verwendungsklasse des LogServiceProviders, den wir selbst erstellt haben.

Ersetzen Sie dann in bootstrapapp.php das neue Objekt der Variablen $app durch das, das wir geerbt und neu geschrieben haben.

$app = new App\Foundation\Application(
 realpath(__DIR__.&#39;/../&#39;)
);

Auf diese Weise habe ich den Protokollpfad beiläufig erfolgreich definiert und mit dieser Erfahrung kann ich die Teile des Frameworks, die meinen Anforderungen nicht entsprechen, weiter optimieren, ohne dass ich sie geändert habe Ich verfüge über den zugrunde liegenden Code des Frameworks und kann das Framework sicher aktualisieren, wenn es Fehlerbehebungen im Framework gibt.

Empfohlene verwandte Artikel:

Detaillierte Erläuterung der Beispiele für benutzerdefinierte PHP-Fehlerprotokolle

Schreibprotokoll für benutzerdefinierte Yii2-Protokolldateien

Das obige ist der detaillierte Inhalt vonSo passen Sie die Analyse des Protokollverhaltens in Laravel5.5 an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn