2015-08-23 12 views
7

Ich benutze Laravel 5.1 und versuche verschiedene Protokollierungslogik für eine Entwicklungs- und Produktionsumgebung festzulegen.Laravel 5 verschiedene Protokollebenen für Entwicklung und Produktion

Während meine Anwendung ich bin mit der Log Fassade mit den meisten der folgenden verschiedenen Methoden:

Log::emergency($error); 
Log::alert($error); 
Log::critical($error); 
Log::error($error); 
Log::warning($error); 
Log::notice($error); 
Log::info($error); 
Log::debug($error); 

jedoch in meiner Produktionsumgebung, ich würde nur gerne etwas protokollieren, die ein Error ist, Critical, Alert oder Emergency Priorität und Ignorieren Protokollanforderungen mit niedrigerer Priorität.

Ich konnte nichts in der Dokumentation oder durch die Erforschung der Code (Log Fassade und die Monolog Klasse) finden.

Mein aktueller Gedanke ist es, einen benutzerdefinierten Wrapper um die Log-Fassade zu erstellen, der einfach die Umgebung überprüft und alles unterhalb von 400 ignoriert (Monologlevel für Error). Im Grunde würde ich eine Schwellenwertvariable in der Umgebungsdatei erstellen und alles, was darunter liegt, wird einfach nicht in den Dateien protokolliert.

Bevor ich das tue, wollte ich die Community fragen, ob es eine existierende Methode/Konfiguration für das gibt, die ich verwenden könnte, damit ich das Rad nicht neu erfinde.

Wenn nicht - was wäre der beste Ansatz?

+0

Welchen Logger verwenden Sie? "single", "täglich", "syslog" oder "errorlog"? Leider hängt die Lösung vom verwendeten Logger ab. –

+0

@ jedrzej.kurylo Ich benutze 'Daily' – Yani

Antwort

4

Diese gist zeigt eine bequemere Antwort, wie auf den gewählten Handler nicht abhängig ist.

Ich gebe nur den wesentlichen Teil in einer Antwort hier für den Fall, dass der obige Link in einiger Zeit gelöscht wird.

In der AppServiceProviders Register Methode:

/** 
* Register any application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    // 
    $monolog = Log::getMonolog(); 
    foreach($monolog->getHandlers() as $handler) { 
     $handler->setLevel(Config::get('app.log-level')); 
    } 
} 

Dann fügen Sie einfach einen zusätzlichen Schlüssel zu Ihrer config/App.php:

'log-level' => 'info', // or whatever minimum log level you would like. 
2

Fügen Sie den folgenden Code in Ihre AppServiceProvider :: register():

$this->app->configureMonologUsing(function ($monolog) { 
    $monolog->pushHandler(
    $handler = new RotatingFileHandler(
     $this->app->storagePath() . '/logs/laravel.log', 
     $this->app->make('config')->get('app.log_max_files', 5), 
     $this->app->make('config')->get('app.level', 'debug') 
    ) 
); 

    $handler->setFormatter(new LineFormatter(null, null, true, true)); 
}); 

Diese Logik neu erstellt, dass Laravel tut, wenn die täglich Handler einrichten, fügt aber vorbei Ebene der Handler.

'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency 

Dies ist ein bisschen ein Problem zu umgehen und jede Art von Handler müßte sein:

Sie können Ihre Mindestprotokollebene, indem Ebene Wert in Ihrem config/app.php gesetzt separat einrichten. Ich arbeite derzeit an einer Pull-Anfrage an Laravel, die Einstellung mindestens Debug-Ebene aus der Konfigurationsdatei hinzufügen würde, ohne eine Zeile Code in Ihrem AppServiceProvider schreiben.

Der obige Code wurde nicht getestet, also lassen Sie es mich wissen, wenn Sie Tippfehler sehen oder etwas nicht richtig funktioniert und ich werde mehr als glücklich sein, dass diese Arbeit für Sie funktioniert.

+0

Es gibt ein Problem mit L5-Protokollierung (unter Linux) in dem, wenn Sie' artisan' von der Befehlszeile ** nicht ** als * Web-Benutzer * ausführen, a Es könnte eine Protokolldatei erstellt werden, die vom * Web-Server * nicht beschrieben werden kann. Ich habe eine Pull-Anfrage eingereicht, die das Problem behebt, aber stattdessen wurde mir empfohlen, 'configureMonologUsing()' zu verwenden. Also achten Sie darauf und 'chmod' Ihre Log-Dateien dort auch. ;) – lucifurious

Verwandte Themen