在使用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中開發有所幫助。
以上是laravel報錯怎麼排查的詳細內容。更多資訊請關注PHP中文網其他相關文章!