laravel進階--6 異常處理 & 錯誤日誌

錯誤詳情

 

配置文件 config/app.php 中的 debug 配置項控制瀏覽器顯示的錯誤信息數量。默認情況下,該配置項通過 .env 文件中的環境變量 APP_DEBUG 進行設置。

 

對本地開發而言,你應該設置環境變量 APP_DEBUG 值爲 true。在生產環境,該值應該被設置爲 false。如果在生產環境被設置爲 true,就有可能將一些敏感的配置值暴露給終端用戶。

日誌存儲

 

默認情況下,Laravel 支持日誌文件類型爲 single, daily, syslog 和 errorlog。如果你想要日誌文件按天生成而不是生成並記錄到單個文件,應該在配置文件 config/app.php 中設置 log 值如下:

 

'log' => 'daily'

 

其他幾種日誌類型含義如下:

 

single:所以日誌信息會記錄到單個日誌文件裏

syslog:通過系統 syslog 服務處理日誌信息

errorlog:通過 PHP error_log 處理器處理日誌信息

 

注:底層處理機制可以參考

Illuminate\Log\LogServiceProvider 中的實現邏輯。

 

日誌文件最大生命週期

 

使用 daily 日誌模式的時候,Laravel 默認最多爲我們保留最近 5 天的日誌,如果你想要修改這個時間,需要添加一個配置 log_max_files 到 app 配置文件:

 

'log_max_files' => 30

 

日誌錯誤級別

 

使用 Monolog 的時候,日誌消息可能有不同的錯誤級別,默認情況下,Laravel 將所有級別日誌寫到存儲器,但是在生產環境中,你可能想要配置最低錯誤級別,這可以通過在配置文件 app.php 中添加配置項 log_level 來實現。

 

該配置項被配置後,Laravel 會記錄所有錯誤級別大於等於這個指定級別的日誌,例如,默認 log_level 是 error ,則將會記錄 error、critical、alert 以及 emergency 級別的日誌信息:

 

'log_level' => env('APP_LOG_LEVEL', 'error'),

 

注:Monolog 支持以下錯誤級別:debug、info、notice、warning、error、critical、alert、emergency。

 

HTTP 異常

 

有些異常描述來自服務器的 HTTP 錯誤碼,例如,這可能是一個“頁面未找到”錯誤(404),“認證失敗錯誤”(401)亦或是程序出錯造成的500錯誤,爲了在應用中生成這樣的響應,可以使用 abort 輔助函數:

 

abort(404);

 

abort 輔助函數會立即引發一個會被異常處理器渲染的異常,此外,你還可以像這樣提供響應描述:

 

abort(403, '未授權操作');

 

該方法可在請求生命週期的任何時間點使用。

自定義 HTTP 錯誤頁面

 

在 Laravel 中,返回不同 HTTP 狀態碼的錯誤頁面很簡單,例如,如果你想要自定義 404 錯誤頁面,創建一個 resources/views/errors/404.blade.php 文件,該視圖文件用於渲染程序返回的所有 404 錯誤。需要注意的是,該目錄下的視圖命名應該和相應的 HTTP 狀態碼相匹配。abort 函數觸發的 HttpException 異常會以 $exception 變量的方式傳遞給視圖:

 

<h2>{{ $exception->getMessage() }}</h2>

 

日誌

 

Laravel 基於強大的 Monolog 庫提供了簡單的日誌抽象層,默認情況下,Laravel 被配置爲在 storage/logs 目錄下每天爲應用生成日誌文件,你可以使用 Log 門面記錄日誌信息到日誌中:

 

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 顯示指定用戶的屬性
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        Log::info('Showing user profile for user: '.$id);
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

 

該日誌記錄器提供了 RFC 5424 中定義的八種日誌級別:emergency、alert、critical、error、warning、notice、info 和 debug。

 

Log::emergency($error);

Log::alert($error);

Log::critical($error);

Log::error($error);

Log::warning($error);

Log::notice($error);

Log::info($error);

Log::debug($error);

 

上下文信息

 

上下文數據也會以數組形式傳遞給日誌方法,然後和日誌消息一起被格式化和顯示:

 

Log::info('User failed to login.', ['id' => $user->id]);

發佈了76 篇原創文章 · 獲贊 5 · 訪問量 9215
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章