1、簡介
開始一個新的Lumen項目的時候,錯誤和異常處理已經預設為你配置好了。此外,Lumen還整合了提供各種功能強大Tlog器的Monolog日誌庫。
2、配置
錯誤詳情
設定檔 .env中的 APP_DEBUG配置選項控制瀏覽器顯示的錯誤詳情數量。
對本地開發而言,你應該設定環境變數 APP_DEBUG值為 true。在生產環境,該值應該被設定為 false。
自訂Monolog配置
如果你想要完全控制Monolog的配置,可以使用 configureMonologUsing方法,並且需要在 bootstrap/app.php中調用該方法:
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...);});return $app;
3、異常處理器
所有異常都由類 App\Exceptions\Handler處理,該類包含兩個方法: report和 render。下面我們詳細闡述這兩個方法。
3.1 report方法
report方法用於記錄異常並將其發送給外部服務如 Bugsnag。預設情況下, 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錯誤異常不會被寫到記錄檔,如果需要的話你可以添加其他異常類型到這個數組。
3.2 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(404);
abort方法會立即引發一個會被異常處理器渲染的異常,此外,你還可以像這樣提供響應描述:
abort(403, 'Unauthorized action.');
該方法可在請求生命週期的任何時間點使用。
5、日誌
Lumen日誌工具基於強大的 Monolog庫,預設情況下,Lumen被配置為在 storage/logs目錄下每日為應用組建記錄檔檔案,你可以使用 Log門面編寫日誌資訊到日誌中:
User::findOrFail($id)]); }}
該日誌記錄器提供了 RFC 5424中定義的七種記錄層級: alert, critical, error, warning, notice, info和 debug。
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]);