国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

Laravel 5.3 學習筆記之 錯誤&日志

2024-05-04 23:49:30
字體:
來源:轉載
供稿:網友

1、簡介

Laravel默認已經為我們配置好了錯誤和異常處理,我們在App/Exceptions/Handler類中觸發異常并將響應返回給用戶。本教程我們將深入探討這個類。

此外,Laravel還集成了Monolog日志庫以便提供各種功能強大的日志處理器,默認情況下,Laravel已經為我們配置了一些處理器,我們可以選擇單個日志文件,也可以選擇記錄錯誤信息到系統日志。

2、配置

錯誤詳情顯示

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

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

日志存儲

默認情況下,Laravel支持日志方法single, daily, syslog 和 errorlog。如果你想要日志文件按日生成而不是生成單個文件,應該在配置文件config/app.php中設置log值如下:

'log' => 'daily'

日志文件最大生命周期

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

'log_max_files' => 30

日志錯誤級別

使用Monolog的時候,日志消息可能有不同的錯誤級別,默認情況下,Laravel將所有日志寫到storage目錄,但是在生產環境中,你可能想要配置最低錯誤級別,這可以通過在配置文件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。
自定義Monolog配置

如果你想要在應用中完全控制Monolog的配置,可以使用configureMonologUsing方法。你需要在bootstrap/app.php文件返回$app變量之前調用該方法:

$app->configureMonologUsing(function($monolog) {  $monolog->pushHandler(...);});return $app;

3、異常處理器

所有異常都由類App/Exceptions/Handler處理,該類包含兩個方法:report和render。下面我們詳細闡述這兩個方法。

report方法

report方法用于記錄異常并將其發送給外部服務如Bugsnag或Sentry,默認情況下,report方法只是將異常傳遞給異常被記錄的基類,當然你也可以按自己的需要記錄異常并進行相關處理。

例如,如果你需要以不同方式報告不同類型的異常,可使用PHP的instanceof比較操作符:

/** * 報告或記錄異常 * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param /Exception $e * @return void */public function report(Exception $e){  if ($e instanceof CustomException) {    //  }  return parent::report($e);}

通過類型忽略異常

異常處理器的$dontReport屬性包含一個不會被記錄的異常類型數組,默認情況下,404錯誤異常不會被寫到日志文件,如果需要的話你可以添加其他異常類型到這個數組:

/** * A list of the exception types that should not be reported. * * @var array */protected $dontReport = [  /Illuminate/Auth/AuthenticationException::class,  /Illuminate/Auth/Access/AuthorizationException::class,  /Symfony/Component/HttpKernel/Exception/HttpException::class,  /Illuminate/Database/Eloquent/ModelNotFoundException::class,  /Illuminate/Validation/ValidationException::class,];

render方法

render方法負責將給定異常轉化為發送給瀏覽器的HTTP響應,默認情況下,異常被傳遞給為你生成響應的基類。當然,你也可以按照自己的需要檢查異常類型或者返回自定義響應:

/** * 將異常渲染到HTTP響應中 * * @param /Illuminate/Http/Request $request * @param /Exception $e * @return /Illuminate/Http/Response */public function render($request, Exception $e){  if ($e instanceof CustomException) {    return response()->view('errors.custom', [], 500);  }  return parent::render($request, $e);}

4、HTTP異常

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

abort(404);

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

abort(403, 'Unauthorized action.');

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

自定義HTTP錯誤頁面

在Laravel中,返回不同HTTP狀態碼的錯誤頁面很簡單,例如,如果你想要自定義404錯誤頁面,創建一個resources/views/errors/404.blade.php文件,該視圖文件用于渲染程序返回的所有404錯誤。需要注意的是,該目錄下的視圖命名應該和相應的HTTP狀態碼相匹配。

5、日志

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

<?phpnamespace App/Http/Controllers;use Log;use App/User;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]);

訪問底層Monolog實例

Monolog有多個可用于日志的處理器,如果需要的話,你可以訪問Laravel使用的底層Monolog實例:

$monolog = Log::getMonolog();


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 土默特右旗| 浠水县| 赫章县| 奎屯市| 桂东县| 崇左市| 万荣县| 阜康市| 瓦房店市| 永登县| 康定县| 色达县| 青海省| 闽清县| 柯坪县| 宣化县| 大港区| 辽源市| 汕头市| 清涧县| 乌恰县| 荔浦县| 永川市| 宣城市| 永寿县| 定安县| 诸城市| 达尔| 慈利县| 崇阳县| 合川市| 定西市| 常熟市| 习水县| 昌图县| 阜南县| 汽车| 蒙城县| 浪卡子县| 定州市| 九龙坡区|