錯誤與日志

2018-12-17 10:51 更新

配置

應(yīng)用程序的日志功能配置在 Illuminate\Foundation\Bootstrap\ConfigureLogging 啟動類中。這個類使用 config/app.php 配置文件的 log 配置選項。

日志工具默認(rèn)使用每天的日志文件;然而,你可以依照需求自定義這個行為。因為 Laravel 使用流行的 Monolog 日志函數(shù)庫,你可以利用很多 Monolog 提供的處理進程。

例如,如果你想要使用單一日志文件,而不是每天一個日志文件,你可以對 config/app.php 配置文件做下面的變更:

'log' => 'single'

           

Laravel 提供立即可用的 single 、daily 、syslogerrorlog 日志模式。然而,你可以通過覆寫 ConfigureLogging 啟動類,依照需求自由地自定義應(yīng)用程序的日志。

錯誤細(xì)節(jié)

config/app.php 配置文件的 app.debug 配置選項控制應(yīng)用程序透過瀏覽器顯示錯誤細(xì)節(jié)。配置選項默認(rèn)參照 .env 文件的 APP_DEBUG 環(huán)境變量。

進行本地開發(fā)時,你應(yīng)該配置 APP_DEBUG 環(huán)境變量為 true 。 在上線環(huán)境,這個值應(yīng)該永遠為 false            

           

錯誤處理

所有的異常都由 App\Exceptions\Handler 類處理。這個類包含兩個方法: reportrender 。

report 方法用來記錄異?;虬旬惓鬟f到外部服務(wù),例如: BugSnag 。默認(rèn)情況下, report 方法只基本實現(xiàn)簡單地傳遞異常到父類并于父類記錄異常。然而,你可以依你所需自由地記錄異常。如果你需要使用不同的方法來報告不同類型的異常,你可以使用 PHP 的 instanceof 比較運算符:

/**
 * 報告或記錄異常。
 *
 * 這是一個發(fā)送異常到 Sentry、Bugsnag 等服務(wù)的好地方。
 *
 * @param  \Exception  $e
 * @return void
 */public function report(Exception $e){
    if ($e instanceof CustomException)
    {
        //    }

    return parent::report($e);}

           

render 方法負(fù)責(zé)把異常轉(zhuǎn)換成應(yīng)該被傳遞回瀏覽器的 HTTP 響應(yīng)。默認(rèn)情況下,異常會被傳遞到基礎(chǔ)類并幫你產(chǎn)生響應(yīng)。然而,你可以自由的檢查異常類型或返回自定義的響應(yīng)。

異常處理進程的 dontReport 屬性是個數(shù)組,包含應(yīng)該不要被紀(jì)錄的異常類型。由 404 錯誤導(dǎo)致的異常默認(rèn)不會被寫到日志文件。你可以依照需求添加其他類型的異常到這個數(shù)組。

           

HTTP 異常

有一些異常是描述來自服務(wù)器的 HTTP 錯誤碼。例如,這可能是個「找不到頁面」錯誤 (404)、「未授權(quán)錯誤」(401),或甚至是工程師導(dǎo)致的 500 錯誤。使用下面的方法來返回這樣一個響應(yīng):

abort(404);

           

或是你可以選擇提供一個響應(yīng):

abort(403, 'Unauthorized action.');

           

你可以在請求的生命周期中任何時間點使用這個方法。

自定義 404 錯誤頁面

要讓所有的 404 錯誤返回自定義的視圖,請建立一個 resources/views/errors/404.blade.php 文件。應(yīng)用程序?qū)褂眠@個視圖處理所有發(fā)生的 404 錯誤。

           

日志

Laravel 日志工具在強大的 Monolog 函數(shù)庫上提供一層簡單的功能。Laravel 默認(rèn)為應(yīng)用程序建立每天的日志文件在 storage/logs 目錄。你可以像這樣把信息寫到日志:

Log::info('This is some useful information.');Log::warning('Something could be going wrong.');Log::error('Something is really going wrong.');

           

日志工具提供定義在 RFC 5424 的七個級別:debug、infonotice、warning、error、criticalalert

也可以傳入上下文相關(guān)的數(shù)據(jù)數(shù)組到日志方法里:

Log::info('Log message', ['context' => 'Other helpful information']);

           

Monolog 有很多其他的處理方法可以用在日志上。如有需要,你可以取用 Laravel 底層使用的 Monolog 實例:

$monolog = Log::getMonolog();

           

你也可以注冊事件來捕捉所有傳到日志的消息:

注冊日志事件監(jiān)聽器

Log::listen(function($level, $message, $context){
    //});


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號