應(yīng)用程序的日志功能配置在 Illuminate\Foundation\Bootstrap\ConfigureLogging
啟動(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
、daily
、syslog
和 errorlog
日志模式。然而,你可以通過(guò)覆寫(xiě) ConfigureLogging
啟動(dòng)類,依照需求自由地自定義應(yīng)用程序的日志。
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
。
所有的異常都由 App\Exceptions\Handler
類處理。這個(gè)類包含兩個(gè)方法: report
和 render
。
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ì)被寫(xiě)到日志文件。你可以依照需求添加其他類型的異常到這個(gè)數(shù)組。
有一些異常是描述來(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ò)誤返回自定義的視圖,請(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
目錄。你可以像這樣把信息寫(xiě)到日志:
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、info、notice、warning、error、critical 和 alert。
也可以傳入上下文相關(guān)的數(shù)據(jù)數(shù)組到日志方法里:
Log::info('Log message', ['context' => 'Other helpful information']);
Monolog 有很多其他的處理方法可以用在日志上。如有需要,你可以取用 Laravel 底層使用的 Monolog 實(shí)例:
$monolog = Log::getMonolog();
你也可以注冊(cè)事件來(lái)捕捉所有傳到日志的消息:
Log::listen(function($level, $message, $context){ //});
更多建議: