2013-03-23 2 views

Antwort

9

Yep, könnten Sie einen Listener erstellen alles im routes.php

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

Oder alternativ anmelden, wenn Sie nur wollten 400 log Fehler und 500 Larvavel gibt es ein Log Event in der routes.php Datei die auf Fehler 404 und 500 hört, können Sie Ihren eigenen Code in diesem Ereignislistener schreiben. Also vorausgesetzt, Sie haben ein Modell namens Log definiert,

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

Wie Sie sehen können, wenn Sie weiter die Schlagzeile lesen, Monolog nativ unterstützt Schreiben auf Redis, MongoDB und CouchDB. Diese drei unterstützen alle ziemlich schwer (und schreiben im Fall von Redis sehr schwer). MySQL ist nicht da, weil die Protokollierung auf MySQL nicht wirklich die beste Idee der Welt ist.

Wenn Sie es wirklich tun möchten, können Sie die Dokumente zum Erstellen Ihrer eigenen Handler überprüfen, die erläutert, wie Sie einen PDO-Handler erstellen und verwenden, um in eine SQL-Datenbank schreiben: https://github.com/Seldaek/monolog/blob/master/doc/extending.md - Ich denke immer noch, es ist eine schlechte Idee , aber vielleicht rechtfertigt dies der Anwendungsfall.

+2

Nur damit Sie wissen, über den Code nicht tatsächlich in L4 arbeiten, wenn Sie speziell das Ereignis mit dem Ereignisse auslösen: :Feuer(). In L4 müssen Sie den Hörer mit der Log-Klasse registrieren und nicht der Event-Klasse, zum Beispiel: 'Log :: hören (function ($ level, $ message, $ context) { // Code }) ; ' – JamesG

+0

Warum ist das Speichern von Logs in MySQL keine gute Idee? –

+0

@PavelKostenko denn wenn Sie jede Art von hohen Last Anwendung haben Sie eine Tonne von MySQL schreibt, die nicht wirklich das, was MySQL im Vergleich zu anderen spezialisierten Logging-Lösungen am besten ist. – Seldaek

0

Als ich die gleiche Forderung in meinem Projekt hatte, ich habe einen Handler erstellt für Monolog die Protokollausgabe auf MySQL zu schreiben. Es wird unter MIT-Lizenz veröffentlicht und ist über composer oder direkt unter erhältlich. Vielleicht einen Versuch wert.

0

In Laravel 5 jetzt ist es illuminate.log

Jetzt wird es wie

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