PHPlaravel 基础教程 —— 错误和日志

谬误和日志

简介

当您起来一个新的 laravel
项目时,你势必会必要到对错误和卓殊的处理,而那么些 laravel
都曾经为您布置好了。其余,laravel 还合并了
Monolog
日志组件库,它提供了各个强大的日志处理器。

PHP,配置

荒谬详情

你的利用中经过浏览器来体现的荒谬详情程度是通过你的 config/app.php
配置文件中的 debug 选项来开展计划的。暗中认可的该配置项遵守 .env
文件中的 APP_DEBUG 环境变量。

日志格局

larvel 提供了二种开箱即用的日记形式:singledailysyslog
errorlog。比如,假设你指望利用天天日期文件记录日志来替换暗中同意的单文件记录方式。你能够简不难单的在
config/app.php 配置文件中该装置 log 选项的值:

'log' => 'daily'

当使用 daily 日志方式时,laravel 默许只会保留 5
天内的日记文件。假诺你要求保留越多的日记文件,你要求在 config/app.php
文件中添加 log_max_files 选项:

'log_max_files' => 30

自定义 Monolog 配置

比方你想要在利用中对 Monolog 的配置拥有完全的支配,你可以行使应用的
configureMonologUsing 方法。你应有在 bootstrap/app.php
文件中开展艺术的调用,并且你应有把它放置在回到 $app 之前:

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

return $app;

暗许的,laravel
会记录所有等级的日记。在生育条件中,你只怕会想要只记录某些阶段的日志,你可以经过在
app.php 配置文件中添加 log_level 选项来成功。laravel
会记录那一个阶段的日记和比那一个阶段日志更高级的日志。比如,设置 log_level
error,那么它会记录 errorcriticalalertemergency
等级的信息:

'log_level' => app_env('APP_LOG_LEVEL', 'debug'),

丰盛处理

负有的那么些都会在 App\Exceptions\Handler
类中举行处理。该类蕴涵了多个主意:report
render。大家将会对那个多个措施开展详尽的辨析。

Report 方法

report 方法被用来记录相当恐怕发送万分到其余的劳务中去,比如
BugSnag 或者
Sentry。默认的,report
方法只是粗略的传递卓殊到尤其记录的基类中。事实上,你可以随心所欲的根据本人的期待去记录卓殊。

譬如,假使你愿意用分歧的不二法门来记录差距品类的尤其,你能够运用 PHP 的
instanceof 方法来进展筛选操作:

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

   return parent::report($e);
 }

按照项目来忽略万分

丰富处理类的 $dontReport
属性包括了一个急需忽略的不得了类数组。这么些数组中类型的格外将不会被记录。暗许的
404
类型的失实就不会记录在日记文件中,你可以按需在那些数组中开展追加忽略的分外类名。

Render 方法

render
方法用来将卓殊转换为传送回浏览器的响应音信。暗许十分会被传送到基类并回到一个响应。事实上,你可以任意的按需进行定制化响应:

/**
 * Render an exception into an HTTP response.
 *
 * @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);
}

HTTP 异常

稍稍非常是一贯从服务器来描述 HTTP
的错误代码。比如,那只怕是一个“页面没有找到”的错误(404),一个“未授权”的失实(401)或然是一个“开发错误”(500)。为了在您的接纳中疾速的转移那体系型的响应,你可以应用下边的点子:

abort(404);

abort
方法会立刻的提议一个丰裕,该尤其会在特别处理中被渲染。你也足以在该形式中提供一个可选的响应文件:

abort(403, 'Unauthorized action.');

该措施能够在乞请的生命周期中的任意时间点选择。

自定义 HTTP 错误页面

laravel 使根据 HTTP
响应状态码来成立自定义的一无所长页面相当简单。比如,你大概希望自定义一个荒谬页面来提供给404 HTTP 状态码。你可以创制一个 resoucres/views/errors/404.blade.php
文件。该公文种在选择抛出 404 错误时自动的提供服务。

在该目录下的视图的命名应该与 HTTP 状态码相对应。

日志

laravel 的日志系统是依据强大的
Monolog
类库的。默认的,laravel 设置了 storage/logs
目录来存放在日志文件。你可以接纳 Log 假面来记录日志音讯:

<?php

namespace App\Http\Controllers;

use Log;
use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller 
{
  /**
   * Show the profile for the given user.
   * 
   * @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

规范定义了 8
中国和东瀛记等级: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);

上下文新闻

您能够在入日志方法中传送一个上下文数据的数组,这一个上下文数据将会被格式化并在日记消息中显示:

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

走访底层的 Monolog 实例

Monolog 拥有各个额外日志处理办法。假设您须求,你可以在 laravel
中利用上面的艺术访问底层的 Monolog 实例:

$monolog = Log::getMonolog();

相关文章