laravel報錯怎么排查

在使用laravel框架進行開發過程中,難免會出現各種錯誤或異常。如何快速排查錯誤并解決問題,是基礎開發者面臨的挑戰。本文將為您介紹laravel報錯的排查方法,幫助您在開發過程中事半功倍。

一、日志記錄

Laravel會將日志信息按照不同等級(debug、info、notice、warning、Error、critical、alert、emergency)分別記錄在不同文件中。我們可以通過查看日志文件來快速找出代碼中出現的錯誤。

1.1 查看日志文件

打開項目根目錄中的storage/logs目錄,可以看到laravel.log文件,這個是系統所有級別日志 的總日志文件,如果想以某種級別來分集日志記錄,可在config/Logging.php 文件中進行配置;

在日志文件中,可以針對時間、進程、級別等條件進行篩選查看錯誤信息。具體使用方式如下:

tail -f storage/logs/laravel.log // 監控最新的日志內容,按Ctrl+C停止 cat storage/logs/laravel.log | grep '關鍵字' // 搜索包含"關鍵字"的日志內容 tail -n 100 storage/logs/laravel.log | grep '關鍵字' // 查看最后100行日志是否包含"關鍵字" 

1.2 級別設置

通過 Laravel 自帶的目錄 app/Exceptions/Handler.php 類,可以看到日志的級別設置在了 report() 函數的第一個參數中,Laravel 默認的日志級別為 error,這意味著,只有 error 級別及以上的日志會被記錄在 app/public/storage/logs/laravel.log 日志文件中。

如果想要將 warning 級別及以上的日志都寫入日志文件,可以在report() 函數的第一個參數中添加起始級別,如下所示:

public function report(Exception $exception) {     if ($this->shouldReport($exception)) {         Log::channel('daily')->warning('遇到錯誤啦!', [             'error' => $exception->getMessage()         ]);     }      parent::report($exception); }

通過Log::channel(‘daily’)->warning()操作,將錯誤信息與級別一起寫入日志,并通過shouldReport() 方法判斷是否需要寫入日志。

二、異常處理

在Laravel應用中,拋出自定義異常的方式非常簡單,只需進行以下操作即可:

2.1 自定義異常

創建一個新的異常類,并繼承Laravel默認的Exception類,如下所示:

namespace AppExceptions; use Exception;  class CustomException extends Exception {     public function __construct($message = null, $code = 0)     {         parent::__construct($message, $code); // 調用父類的構造方法     }      public function report()     {         // 記錄錯誤日志          Log::error('CustomException:'.$this->getMessage());     }      public function render($request)     {         return response()->json(['message' => $this->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);     } }

在構造方法中,我們可以定義異常信息及狀態碼,并在 report() 方法中記錄錯誤日志,在 render() 方法中返回JSON格式的異常信息及狀態碼。

當應用程序中出現了 CustomException時,Laravel會自動執行 report() 方法將錯誤信息記錄到日志文件中,并通過 render() 方法返回異常信息給前端顯示。

2.2 觸發異常

在代碼中使用 throw new CustomException ()方法即可拋出異常,如下所示:

public function test(Request $request) {     // ...     if (! check_validate($request->all())) {         throw new CustomException('請求參數不正確');     }  }

三、錯誤調試

在進行開發或測試時,有時需要在代碼中打出調試信息來方便查找問題所在,而在 Laravel 中,我們可以通過 dump() 和 dd() 兩個函數來快速輸出調試信息和中斷程序執行結果。

3.1 dump()和dd()

dump() 函數用于打印變量或者數組的內容,不會中斷程序的運行。類似于PHP內置的var_dump()函數。

dd() 函數不僅會打印變量或者數組的內容,還會中斷程序的執行,并且把處理到當前位置的代碼以及異常的具體信息都顯示出來。類似于PHP內置die() 或exit()函數。

Route::get('/test', function () {     dump('Hello Laravel!');     return response()->json(['key' => 'value']); });  Route::get('/test2', function () {     $array = ['key_one' => 'value_one', 'key_two' => 'value_two'];     dd($array);     return response()->json(['key' => 'value']); }); 

在上述代碼中,我們通過 dump() 和 dd() 方法來打印字符串和數組的內容,使用方式類似于PHP原生函數,非常方便。

四、結語

在Laravel開發過程中,由于各種原因,總會出現各種各樣的報錯信息。如何高效地排查并解決這些錯誤,是每個開發者必須面對的問題。本文中我們介紹了Laravel日志記錄、異常處理、錯誤調試等幾個常用的排查方式,希望對您在Laravel中開發有所幫助。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享