鍍金池/ 教程/ PHP/ 錯誤與日志
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說明
擴展包開發(fā)
HTTP 控制器
事件
擴展框架
Contracts
開發(fā)
配置
表單驗證
錯誤與日志
Hashing
貢獻指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊列
單元測試
服務(wù)容器
文件系統(tǒng) / 云存儲
認證
請求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

錯誤與日志

配置

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

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

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

    'log' => 'single'

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

錯誤細節(jié)

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

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

錯誤處理

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

report 方法用來記錄異?;虬旬惓鬟f到外部服務(wù),例如: BugSnag 。默認情況下, 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 方法負責(zé)把異常轉(zhuǎn)換成應(yīng)該被傳遞回瀏覽器的 HTTP 響應(yīng)。默認情況下,異常會被傳遞到基礎(chǔ)類并幫你產(chǎn)生響應(yīng)。然而,你可以自由的檢查異常類型或返回自定義的響應(yīng)。

異常處理進程的 dontReport 屬性是個數(shù)組,包含應(yīng)該不要被紀錄的異常類型。由 404 錯誤導(dǎo)致的異常默認不會被寫到日志文件。你可以依照需求添加其他類型的異常到這個數(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 默認為應(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、warningerror、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)
    {
        //
    });
上一篇:擴展包開發(fā)下一篇:Redis