婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決

Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決

熱門標(biāo)簽:電銷招聘機(jī)器人 熱線電話機(jī)器人 地圖標(biāo)注入哪個(gè)科目 事業(yè)單位如何百度地圖標(biāo)注 格陵蘭島地圖標(biāo)注 福泉電話機(jī)器人 天津營銷電話機(jī)器人加盟代理 太原極信防封電銷卡 南寧crm外呼系統(tǒng)平臺(tái)

簡介

Laravel 默認(rèn)已經(jīng)為我們配置好了錯(cuò)誤和異常處理,我們?cè)?App\Exceptions\Handler 類中觸發(fā)異常并將響應(yīng)返回給用戶。

此外,Laravel 還集成了 Monolog 日志庫以便提供各種功能強(qiáng)大的日志處理器,默認(rèn)情況下,Laravel 已經(jīng)為我們配置了一些處理器,我們可以選擇單個(gè)日志文件,也可以選擇記錄錯(cuò)誤信息到系統(tǒng)日志。

配置

調(diào)試模式

配置文件 config/app.php 中的 debug 配置項(xiàng)表示是否開啟調(diào)試模式,調(diào)試模式下會(huì)將錯(cuò)誤信息直接暴露給客戶端。

默認(rèn)情況下,該配置項(xiàng)通過 .env 文件中的環(huán)境變量 APP_DEBUG 進(jìn)行設(shè)置,默認(rèn)值為 true ,即開啟調(diào)試模式。

對(duì)本地開發(fā)而言,你應(yīng)該設(shè)置環(huán)境變量 APP_DEBUG 值為 true。在生產(chǎn)環(huán)境,該值應(yīng)該被設(shè)置為 false。如果在生產(chǎn)環(huán)境被設(shè)置為 true,就有可能將一些敏感的信息暴露給終端用戶。

日志存儲(chǔ)

Laravel 支持的日志文件類型為 single, daily, syslog 和 errorlog。

single: 所有的日志信息會(huì)記錄到單個(gè)日志文件里。

daily:按天生成日志文件。

syslog: 通過系統(tǒng) syslog 服務(wù)處理日志信息。

errorlog: 通過 PHP error_log 處理器處理日志信息。

如果你想要日志文件按天生成而不是生成并記錄到單個(gè)文件,應(yīng)該在配置文件 config/app.php 中設(shè)置 log 值如下:

'log' => 'daily'

注:底層處理機(jī)制可以參考 Illuminate\Log\LogServiceProvider 中的實(shí)現(xiàn)邏輯。

日志文件最大生命周期

使用 daily 日志模式的時(shí)候,Laravel 默認(rèn)最多為我們保留最近 5 天的日志,如果你想要修改這個(gè)時(shí)間,需要添加一個(gè)配置 log_max_files 到 app 配置文件:

'log_max_files' => 30

日志錯(cuò)誤級(jí)別

使用 Monolog 的時(shí)候,日志消息可能有不同的錯(cuò)誤級(jí)別,默認(rèn)情況下,Laravel 將所有級(jí)別日志寫到存儲(chǔ)器,但是在生產(chǎn)環(huán)境中,你可能想要配置最低錯(cuò)誤級(jí)別,這可以通過在配置文件 app.php 中添加配置項(xiàng) log_level 來實(shí)現(xiàn)。

該配置項(xiàng)被配置后,Laravel 會(huì)記錄所有錯(cuò)誤級(jí)別大于等于這個(gè)指定級(jí)別的日志。

例如,如果配置 log_level 為 error ,則會(huì)記錄 error、critical、alert 以及 emergency 級(jí)別的日志信息。

'log_level' => env('APP_LOG_LEVEL', 'error'),

注:Monolog 支持以下錯(cuò)誤級(jí)別:debug、info、notice、warning、error、critical、alert、emergency。

自定義 Monolog 配置

如果你想要在應(yīng)用中完全控制 Monolog 的配置,可以使用configureMonologUsing 方法。你需要在 bootstrap/app.php 文件返回 $app 變量之前調(diào)用該方法:

$app->configureMonologUsing(function($monolog) {
  $monolog->pushHandler(...);
});
 
return $app;

自定義頻道名稱

默認(rèn)情況下,Monolog 會(huì)通過一個(gè)與當(dāng)前環(huán)境匹配的名字進(jìn)行實(shí)例化,例如 production 或 local。如果想修改這個(gè)值,需要添加 log_channel 配置項(xiàng)到配置文件 config/app.php:

'log_channel' => env('APP_LOG_CHANNEL', 'my-app-name'),

異常處理器

所有異常都由類 App\Exceptions\Handler 處理,該類包含兩個(gè)方法:report 和 render。

report 方法

report 方法用于記錄異常并將其發(fā)送給外部服務(wù)如 Bugsnag 或 Sentry。

默認(rèn)情況下,report 方法只是將異常傳遞給異常被記錄的基類,當(dāng)然你也可以按自己的需要記錄異常并進(jìn)行相關(guān)處理。

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

/**
 * Report or log an exception.
 *
 * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
 *
 * @param \Exception $exception
 * @return void
 */
public function report(Exception $exception)
{
  if ($exception instanceof CustomException) {
    //
  }
  parent::report($exception);
}

report 輔助函數(shù)

有時(shí)候你可能需要報(bào)告一個(gè)異常并繼續(xù)處理當(dāng)前請(qǐng)求。輔助函數(shù) report 允許你使用異常處理器的 report 方法快速報(bào)告一個(gè)異常而不會(huì)渲染錯(cuò)誤頁:

public function isValid($value)
{
  try {
    // Validate the value...
  } catch (Exception $e) {
    report($e);
 
    return false;
  }
}

通過類型忽略異常

異常處理器的 $dontReport 屬性包含一個(gè)不會(huì)被記錄的異常類型數(shù)組,默認(rèn)情況下,404 錯(cuò)誤異常不會(huì)被寫到日志文件,如果需要的話你可以添加其他異常類型到這個(gè)數(shù)組:

/**
 * 不應(yīng)該被報(bào)告的異常類型列表.
 *
 * @var array
 */
protected $dontReport = [
  \Illuminate\Auth\AuthenticationException::class,
  \Illuminate\Auth\Access\AuthorizationException::class,
  \Symfony\Component\HttpKernel\Exception\HttpException::class,
  \Illuminate\Database\Eloquent\ModelNotFoundException::class,
  \Illuminate\Validation\ValidationException::class,
];

render 方法

render 方法負(fù)責(zé)將給定異常轉(zhuǎn)化為發(fā)送給瀏覽器的 HTTP 響應(yīng)。

默認(rèn)情況下,異常被傳遞給為你生成響應(yīng)的基類。當(dā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);
}

可報(bào)告 可渲染異常

除了在異常處理器的 report 和 render 方法中進(jìn)行異常類型檢查外,還可以在自定義異常中直接定義 report 和 render 方法。

當(dāng)異常中存在這些方法時(shí),框架會(huì)自動(dòng)調(diào)用它們:

?php
 
namespace App\Exceptions;
 
use Exception;
 
class RenderException extends Exception
{
  /**
   * Report the exception.
   *
   * @return void
   */
  public function report()
  {
    //
  }
 
  /**
   * Render the exception into an HTTP response.
   *
   * @param \Illuminate\Http\Request
   * @return \Illuminate\Http\Response
   */
  public function render($request)
  {
    return response(...);
  }
}

HTTP 異常

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

abort(404);

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

abort(403, '未授權(quán)操作');

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

自定義 HTTP 錯(cuò)誤頁面

在 Laravel 中,返回不同 HTTP 狀態(tài)碼的錯(cuò)誤頁面很簡單,例如,如果你想要自定義 404 錯(cuò)誤頁面,創(chuàng)建一個(gè) resources/views/errors/404.blade.php 文件,該視圖文件用于渲染程序返回的所有 404 錯(cuò)誤。

需要注意的是,該目錄下的視圖命名應(yīng)該和相應(yīng)的 HTTP 狀態(tài)碼相匹配。abort 函數(shù)觸發(fā)的 HttpException 異常會(huì)以 $exception 變量的方式傳遞給視圖:

h2>{{ $exception->getMessage() }}/h2>

日志

Laravel 基于強(qiáng)大的 Monolog 庫提供了簡單的日志抽象層,默認(rèn)情況下,Laravel 的日志配置是為應(yīng)用記錄單個(gè)日志文件。

日志文件的存儲(chǔ)位置是 storage/logs 目錄。

/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/
 
'log' => env('APP_LOG', 'single'),
 
'log_level' => env('APP_LOG_LEVEL', 'debug'),

應(yīng)用運(yùn)行過程中,所有級(jí)別大于或等于 debug 的錯(cuò)誤日志都會(huì)被自動(dòng)記錄到 storage/logs 目錄中。

也可以使用 Log 門面,手動(dòng)記錄日志信息。

?php
 
namespace App\Http\Controllers;
 
use App\User;
use Illuminate\Support\Facades\Log;
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í)別:emergency、alert、critical、error、warning、notice、info 和 debug。

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

上下文信息

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

Log::info('User failed to login.', ['id' => $user->id]);

訪問底層 Monolog 實(shí)例

Monolog 有多個(gè)可用于日志的處理器,如果需要的話,你可以訪問 Laravel 使用的底層 Monolog 實(shí)例:

$monolog = Log::getMonolog();

以上這篇Laravel 5.5 異常處理 錯(cuò)誤日志的解決就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 如何重寫Laravel異常處理類詳解
  • Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式
  • Laravel 修改驗(yàn)證異常的響應(yīng)格式實(shí)例代碼詳解
  • laravel框架使用FormRequest進(jìn)行表單驗(yàn)證,驗(yàn)證異常返回JSON操作示例
  • Laravel 解決composer相關(guān)操作提示php相關(guān)異常的問題
  • 解決laravel 表單提交-POST 異常的問題
  • laravel框架 api自定義全局異常處理方法
  • Laravel核心解讀之異常處理的實(shí)踐過程
  • 淺談Laravel中使用Slack進(jìn)行異常通知

標(biāo)簽:佳木斯 香港 郴州 自貢 寶雞 阿克蘇 通化 金華

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決》,本文關(guān)鍵詞  Laravel,5.5,異常,處理,amp,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決》相關(guān)的同類信息!
  • 本頁收集關(guān)于Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 蒙阴县| 青海省| 丰台区| 东乌珠穆沁旗| 清远市| 历史| 敦煌市| 乌拉特前旗| 漳平市| 和龙市| 洛南县| 鲜城| 鹤壁市| 伊川县| 博野县| 聂荣县| 石渠县| 资源县| 肇源县| 瑞金市| 玉龙| 中卫市| 乌兰县| 香河县| 晋中市| 木里| 旬阳县| 武汉市| 滨海县| 西安市| 华宁县| 叙永县| 南部县| 闸北区| 永善县| 全南县| 嘉兴市| 遂平县| 武宁县| 泗水县| 榆林市|