Lumen 錯(cuò)誤&日志

2021-09-15 14:40 更新

1、簡(jiǎn)介

開始一個(gè)新的Lumen項(xiàng)目的時(shí)候,錯(cuò)誤異常處理已經(jīng)默認(rèn)為你配置好了。此外,Lumen還集成了提供各種功能強(qiáng)大日志處理器的Monolog日志庫。

2、配置

2.1 錯(cuò)誤詳情

配置文件.env中的APP_DEBUG配置選項(xiàng)控制瀏覽器顯示的錯(cuò)誤詳情數(shù)量。

對(duì)本地開發(fā)而言,你應(yīng)該設(shè)置環(huán)境變量APP_DEBUG值為true。在生產(chǎn)環(huán)境,該值應(yīng)該被設(shè)置為false。

3、異常處理器

所有異常都由類App\Exceptions\Handler處理,該類包含兩個(gè)方法:reportrender。下面我們?cè)敿?xì)闡述這兩個(gè)方法。

3.1 report方法

report方法用于記錄異常并將其發(fā)送給外部服務(wù)如Bugsnag。默認(rèn)情況下,report方法只是將異常傳遞給異常被記錄的基類,你可以隨心所欲的記錄異常。

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

/**
 * 報(bào)告或記錄異常
 *
 * 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屬性包含一個(gè)不會(huì)被記錄的異常類型數(shù)組,默認(rèn)情況下,404錯(cuò)誤異常不會(huì)被寫到日志文件,如果需要的話你可以添加其他異常類型到這個(gè)數(shù)組。

3.2 render方法

render方法負(fù)責(zé)將給定異常轉(zhuǎn)化為發(fā)送給瀏覽器的HTTP響應(yīng),默認(rèn)情況下,異常被傳遞給為你生成響應(yīng)的基類。然而,你可以隨心所欲地檢查異常類型或者返回自定義響應(yīng):

/**
 * 將異常渲染到HTTP響應(yīng)中
 *
 * @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異常

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

abort(404);

abort方法會(huì)立即引發(fā)一個(gè)會(huì)被異常處理器渲染的異常,此外,你還可以像這樣提供響應(yīng)描述:

abort(403, 'Unauthorized action.');

該方法可在請(qǐng)求生命周期的任何時(shí)間點(diǎn)使用。

5、日志

Lumen日志工具基于強(qiáng)大的Monolog庫,默認(rèn)情況下,Lumen被配置為在storage/logs目錄下每日為應(yīng)用生成日志文件,你可以使用Log門面編寫日志信息到日志中:

<?php

namespace 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中定義的七種日志級(jí)別:alertcriticalerror,warningnoticeinfo 和 debug

Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

5.1 上下文信息

上下文數(shù)據(jù)數(shù)組也會(huì)被傳遞給日志方法。上下文數(shù)據(jù)將會(huì)和日志消息一起被格式化和顯示:

Log::info('User failed to login.', ['id' => $user->id]);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)