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

錯(cuò)誤與日志

配置

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

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

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

    'log' => 'single'

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

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

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

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

錯(cuò)誤處理

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

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

    /**
     * 報(bào)告或記錄異常。
     *
     * 這是一個(gè)發(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)情況下,異常會(huì)被傳遞到基礎(chǔ)類并幫你產(chǎn)生響應(yīng)。然而,你可以自由的檢查異常類型或返回自定義的響應(yīng)。

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

HTTP 異常

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

    abort(404);

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

    abort(403, 'Unauthorized action.');

你可以在請(qǐng)求的生命周期中任何時(shí)間點(diǎn)使用這個(gè)方法。

自定義 404 錯(cuò)誤頁(yè)面

要讓所有的 404 錯(cuò)誤返回自定義的視圖,請(qǐng)建立一個(gè) resources/views/errors/404.blade.php 文件。應(yīng)用程序?qū)?huì)使用這個(gè)視圖處理所有發(fā)生的 404 錯(cuò)誤。

日志

Laravel 日志工具在強(qiáng)大的 Monolog 函數(shù)庫(kù)上提供一層簡(jiǎn)單的功能。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的七個(gè)級(jí)別:debug、infonotice、warning、error、criticalalert

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

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

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

    $monolog = Log::getMonolog();

你也可以注冊(cè)事件來(lái)捕捉所有傳到日志的消息:

注冊(cè)日志事件監(jiān)聽(tīng)器

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