錯誤及記錄
錯誤細節
Laravel 預設會開啟錯誤訊息顯示,所以在發生錯誤時,將會在錯誤頁面顯示詳細的錯誤訊息,你可以在 app/config/app.php
檔案中,藉由將 debug
選項設定為 false
,即可關掉這些錯誤顯示,強烈建議你在產品的環境中做這樣的設定。
處理錯誤
預設的情況下,app/start/global.php
檔案中,包含了所有例外狀況的處理程序:
App::error(function(Exception $exception)
{
Log::error($exception);
});
這個是最基本的例外處理程序,然而,如果可以的話,你可能想要定義更多的自訂的例外處理程序,處理程序是根據他們所需要處理的例外類型提示 (type-hint) 而被呼叫的,舉例來說,你可以建立一個只有處理 RuntimeException
例外狀況的處理程序:
App::error(function(RuntimeException $exception)
{
// Handle the exception...
});
假如例外處理程序回傳一個回應,則此回應將會傳送給瀏覽器,而沒有其他任何的例外處理程序會被呼叫:
App::error(function(InvalidUserException $exception)
{
Log::error($exception);
return 'Sorry! Something is wrong with this account!';
});
你可以使用 App::fatal
的方法,去擷取 PHP fatal errors 錯誤事件:
App::fatal(function($exception)
{
//
});
HTTP例外處理
在 HTTP 的例外情形,可參考用戶端請求時可能發生的錯誤情況,可能是沒有找到頁面的錯誤 (404),未授權的錯誤 (401),甚至是產生 500 錯誤的情況,你可以使用下列方式回傳這樣的錯誤回應:
App::abort(404, 'Page not found');
第一個參數是 HTTP 的狀態碼,而後面是你想顯示的自訂錯誤訊息。
你可以使用下列方法,產生 401 未授權的錯誤:
App::abort(401, 'You are not authorized.');
這些例外狀況可以在任何請求的生命週期中被執行。
處理404錯誤
你可以在應用程式註冊一個錯誤處理程序處理所有 "404 沒有找到頁面" 的錯誤情況,允許你產生一個自訂的 404 錯誤頁面:
App::missing(function($exception)
{
return Response::view('errors.missing', array(), 404);
});
紀錄
Laravel 的記錄功能,提供一個簡單強大的 Monolog,預設的情況下,Laravel 會被設定去產生每天的紀錄檔,並將記錄檔存放在 app/storage/logs
目錄中,你也可以些一些資訊到這些紀錄檔中,就像:
Log::info('This is some useful information.');
Log::warning('Something could be going wrong.');
Log::error('Something is really going wrong.');
紀錄器提供七種在 RFC 5424 定義的紀錄級別 : debug, info 、 notice 、 warning 、 error 、 critical 及 alert
Monolog 有數種你可以使用的額外的處理程序,如果需要,你可以在 Laravel 存取 Monolog 底層的實例資源:
$monolog = Log::getMonolog();
你也可以註冊一個事件,去擷取所有訊息並傳送訊息到紀錄裡:
註冊一個紀錄傾聽器
Log::listen(function($level, $message, $context)
{
//
});