回到最上方

文件

錯誤及記錄

錯誤細節

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, infonoticewarningerrorcriticalalert

Monolog 有數種你可以使用的額外的處理程序,如果需要,你可以在 Laravel 存取 Monolog 底層的實例資源:

$monolog = Log::getMonolog();

你也可以註冊一個事件,去擷取所有訊息並傳送訊息到紀錄裡:

註冊一個紀錄傾聽器

Log::listen(function($level, $message, $context)
{
    //
});

討論