2015-08-23 12 views
7

Sto usando Laravel 5.1 e sto cercando di impostare una logica di registrazione diversa per un ambiente di sviluppo e produzione.Laravel 5 diversi livelli di registro per lo sviluppo e la produzione

In tutta la mia applicazione sto usando la facciata Log con la maggior parte dei seguenti metodi differenti:

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

Tuttavia, nel mio ambiente di produzione, vorrei registrare solo tutto ciò che è un Error, Critical, Alert oppure Emergency priorità e ignorare le richieste di registro con priorità inferiore.

Non sono riuscito a trovare nulla nella documentazione o esplorando il codice (sia la facciata Log che la classe Monolog).

Il mio attuale pensiero è quello di creare un wrapper personalizzato attorno alla facciata del registro che controlla semplicemente l'ambiente e ignora qualsiasi valore inferiore a 400 (livello Monolog per errore). Fondamentalmente vorrei creare una variabile di soglia nel file di ambiente e qualsiasi cosa al di sotto di essa semplicemente non verrà registrata nei file.

Prima di farlo, volevo chiedere alla comunità se esiste un metodo/configurazione esistente per quello che potrei usare, in modo da non re-inventare la ruota.

In caso contrario, quale sarebbe l'approccio migliore?

+0

Quale registratore stai utilizzando? "single", "daily", "syslog" o "errorlog"? Sfortunatamente la soluzione dipende dal logger utilizzato. –

+0

@ jedrzej.kurylo Sto usando 'Daily' – Yani

risposta

4

Questo gist mostra una risposta più comoda, in quanto non dipende dal gestore scelto .

Fornisco solo la parte essenziale in una risposta qui nel caso in cui il collegamento sopra venga eliminato in un dato momento.

Nel metodo registro degli AppServiceProviders':

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

Poi basta aggiungere un tasto aggiuntivo al vostro config/app.php:

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

Aggiungere il seguente codice al AppServiceProvider :: registro():

$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)); 
}); 

Questo ricrea la logica che laravel fa quando si imposta la quotidiano gestore, ma aggiunge passando al livello di handler.

È possibile impostare il livello di registrazione minimo impostando livello di valore nella vostra config/app.php:

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

Questo è un po 'di una soluzione e di ogni tipo di gestore avrebbe bisogno di essere impostare separatamente. Attualmente sto lavorando a una richiesta pull su Laravel che aggiungerebbe l'impostazione del livello di debug minimo dal file di configurazione senza scrivere una riga di codice nel proprio AppServiceProvider.

Il codice sopra non è stato testato, quindi fatemi sapere se vedete errori di battitura o qualcosa che non funziona correttamente e sarò più che felice di farlo funzionare per voi.

+0

C'è un problema con L5 logging (su Linux) in quanto, se si esegue' artisan' dalla riga di comando ** not ** come * web user *, a è possibile creare un file di registro che non può essere scritto dal * server web *. Ho presentato una richiesta di pull che risolve il problema, ma mi è stato detto di usare 'configureMonologUsing()'. Quindi sii consapevole e 'chmod' i tuoi file di registro anche lì. ;) – lucifurious

Problemi correlati