2013-03-23 17 views

risposta

9

Sì, è possibile creare un ascoltatore per registrare tutto nel routes.php

Event::listen('laravel.log', function($type,$message) 
{ 
    $log = new Log(); 
    $log->message = $message; 
    $log->type = $type; 
    $log->update; 
}); 

Oppure, in alternativa, se si voleva registrare solo gli errori 400 e 500 Larvavel c'è un evento registro nel file routes.php che ascolta gli errori 404 e 500, è possibile scrivere il proprio codice in questo listener di eventi. Quindi, a patto di avere un modello chiamato Log definito,

Event::listen('404', function() 
{ 
    $error = "404: " . URL::full(); 
    Log::error($error); 
    $update = new Log(); 
    $update->error = $error; 
    $update->update; 
    return Response::error('404'); 
}); 

Event::listen('500', function() 
{ 
    Log::error($error); 
    $update = new Log(); 
    $update->error = $error; 
    $update->update; 
    return Response::error('500'); 
}); 
5

Come si può vedere leggendo ulteriormente il titolo, Monolog supporta nativamente la scrittura su Redis, MongoDB e CouchDB. Questi tre stanno tutti supportando casi d'uso abbastanza pesanti (e molto pesanti nel caso di Redis). MySQL non è lì perché accedere a MySQL non è la migliore idea al mondo.

Se si vuole veramente farlo, è possibile controllare i documenti sulla creazione del proprio gestore, che spiega come creare e utilizzare un gestore PDO per scrivere su un database SQL: https://github.com/Seldaek/monolog/blob/master/doc/extending.md - Continuo a pensare che sia una cattiva idea , ma forse il caso d'uso lo giustifica.

+2

Giusto per farvi sapere, il codice di cui sopra non potrà mai funzionare in L4 a meno che non espressamente attivare l'evento utilizzando Event: :fuoco(). In L4 è necessario registrare il listener con la classe Log piuttosto che la classe Event, per esempio: 'Log :: ascoltare (function (livello di $, $ message, $ contesto) {// codice }) ; ' – JamesG

+0

Perché archiviare i log in MySQL non è una buona idea? –

+0

@PavelKostenko perché se si dispone di un qualsiasi tipo di applicazione a carico elevato, si avrà un sacco di scritture MySQL che non è proprio ciò che MySQL è il migliore rispetto ad altre soluzioni di registrazione specializzate. – Seldaek

0

Come ho avuto la stessa domanda nel mio progetto, ho creato un gestore per Monolog per scrivere l'output del registro a MySQL. È rilasciato sotto licenza MIT e disponibile tramite composer o direttamente su GitHub. Potrebbe valere la pena di provare.

0

In laravel 5 ora è illuminate.log

Ora sarà come

Event::listen('illuminate.log', function($type,$message) 
{ 
    .... 
});