2013-03-23 46 views

回答

9

是的,你可以創建一個監聽器來記錄所有在routes.php文件

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

或可替換地,如果你想只記錄錯誤400和500 Larvavel沒有在routes.php文件文件中的日誌事件它監聽錯誤404和500,你可以在這個事件監聽器中編寫你自己的代碼。因此,假如你有定義了一個名爲日誌模式,

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

正如你可以看到如果你進一步閱讀標題,Monolog本身支持寫入Redis,MongoDB和CouchDB。這三者都支持公平寫作(在Redis的情況下寫得很重)用例。 MySQL並不存在,因爲登錄到MySQL並不是真正的世界上最好的想法。

如果你真的想要這樣做,你可以查看關於創建你自己的處理程序的文檔,它解釋瞭如何創建和使用PDO處理程序來寫入SQL數據庫:https://github.com/Seldaek/monolog/blob/master/doc/extending.md - 我仍然認爲這是一個壞主意,但也許是用例保證。

+2

只是爲了讓你知道,上面的代碼將無法在L4實際工作,除非你專門使用事件觸發事件: :火()。 在L4,你需要註冊與登錄類,而不是事件類,如監聽器: '登錄::聽(函數($級,$消息,$上下文) {// 代碼 }) ;' – JamesG 2013-08-22 02:07:36

+0

爲什麼在MySQL中存儲日誌不是個好主意? – 2015-08-06 03:41:59

+0

@PavelKostenko因爲如果你有任何一種高負載的應用程序,你將會有大量的MySQL寫入,這與其他專門的日誌記錄解決方案相比,並不是真正的MySQL。 – Seldaek 2015-08-12 15:23:18

0

正如我在我的項目同樣的需求,我創建了一個處理程序獨白到日誌輸出寫入到MySQL。它在MIT許可下發布,可通過composer或直接在GitHub獲得。值得一試。

0

在laravel 5現在是illuminate.log

現在它會像

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