简介

这一章也是属于文档写得比较混乱的一章,所以我决定重新组织一下内容结构;

配置

debug配置

我们都知道,开发环境应该把debug打开,生产环境应该把debug关闭;
这个设置在config/app.php文件里,找到这一项:

  1. 'debug' => env('APP_DEBUG', false),

优先配置.env的值,后面是默认值。 true把debug打开,false关闭;

log模式配置

同样在config/app.php文件里,找到:

  1. 'log' => 'single',

这里一个有4个可用选项值:"single", "daily", "syslog", "errorlog", 他们分别是:

  • 单文件日志;
  • 每日一文件日志;
  • 系统日志;
  • 错误日志;

处理错误对象及报错信息

app\Exceptions\handler.php这个文件,这是处理所有错误信息的关键文件:

  1. namespace App\Exceptions;
  2. use Exception;
  3. use Symfony\Component\HttpKernel\Exception\HttpException;
  4. use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
  5. class Handler extends ExceptionHandler
  6. {
  7. protected $dontReport = [
  8. HttpException::class,
  9. ];
  10. public function report(Exception $e)
  11. {
  12. return parent::report($e);
  13. }
  14. public function render($request, Exception $e)
  15. {
  16. return parent::render($request, $e);
  17. }
  18. }

一个属性,2个方法;

$dontReport

先来看$dontReport属性,意思是不要log的错误信息,这里面填了HttpException::class, 也就是说,404这种错误, 如果你在这里设置HttpException,laravel会触发,但不会记录的。

你还可以添加更多不报告的错误类;

report()

这个只是把错误对象传递一下,传到基类ExceptionHandler中去,你也可以在这里面把错误类型发布到一些外部服务。

不明白什么意思就跳过,这里不常用;

render()

render()是渲染错误视图的地方,我们主要的自定义逻辑写在这里;

我们最常见的错误类型可能就是:

  1. ModelNotFoundException

于是我们可以这样写:

  1. public function render($request, Exception $e)
  2. {
  3. switch($e){
  4. case ($e instanceof ModelNotFoundException):
  5. return response()->view('errors.404', [], 404);
  6. break
  7. default:
  8. return parent::render($request, $e);
  9. }
  10. }

这样遇到这个ModelNotFoundException错误类的时候,就会触发'errors.404'这个视图;

自定义错误类

首先,在app\Exceptions\里建立一个自定义类:

  1. namespace App\Exceptions;
  2. class CustomException extends \Exception
  3. {
  4. }

然后,在handler.php 的handler()方法内,判断并处理CustomException,显示相应的视图;

  1. public function render($request, Exception $e)
  2. {
  3. switch($e){
  4. case ($e instanceof ModelNotFoundException):
  5. return response()->view('errors.404', [], 404);
  6. break
  7. case ($e instanceof CustomException):
  8. return response()->view('errors.custom',['exception'=>$e]);
  9. break
  10. default:
  11. return parent::render($request, $e);
  12. }
  13. }

触发自定义错误类

  1. try{
  2. App\User::find(-1);
  3. }catch(){
  4. throw new App\Exceptions\CustomException;
  5. }

错误视图常用的一些显示错误的方法

  1. @extends('template.master')
  2. @section('content')
  3. <h1>
  4. @{{ $exception->getStatusCode() }}
  5. </h1>
  6. <p>
  7. @if(!empty($exception->getMessage()))
  8. @{{ $exception->getMessage() }}
  9. @else
  10. @{{ \Symfony\Component\HttpFoundation\Response::$statusTexts[$exception->getStatusCode()] }}
  11. @endif
  12. </p>
  13. @endsection

HTTP错误

自定义http错误页面

发生http错误时,系统会先在resources/views/errors/这个文件夹内找与http错误代码同名的blade文件,比如400错误就会找resources/views/errors/404.blade.php, 所以自定义http错误显示页面,只要在resources/views/errors/按照http错误代码号建立对应的blade文件就行了。

抛出http错误代码

一般,服务器上会设置什么时候抛出http错误代码,但你也可以手动抛出,方法是:

  1. abort(401); abort(500);abort(403)

填上对应的错误代码号即可,这个方法在request的整个生命周期内都可用;

Logging

Laravel的日志功能基于强大的 Monolog 类库,默认情况下是每天生成一个日志文件的模式,日子文件存储在storage/logs

插入log信息

你可以在代码中向log日志插入信息,一共有这些方法可以使用:

  1. Log::emergency($error);
  2. Log::alert($error);
  3. Log::critical($error);
  4. Log::error($error);
  5. Log::warning($error);
  6. Log::notice($error);
  7. Log::info($error);
  8. Log::debug($error);

代码示例:

  1. public function showProfile($id)
  2. {
  3. Log::info('Showing user profile for user: '.$id);
  4. return view('user.profile', ['user' => User::findOrFail($id)]);
  5. }

上下文信息

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

你可以像这样插入第二个参数,数组内的信息将会被格式化,在log显示出来;

获取Monolog对象

  1. $monolog = Log::getMonolog();

像这样获取Monolog对象,Monolog对象中有很多方法可以操作log信息。

Laravel5.1-错误和日志的更多相关文章

  1. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  2. laravel中的错误与日志

    日志 laravel中的日志是基于monolog而封装的.laravel在它上面做了几个事情: 把monolog中的addInfo等函数简化成为了info这样的函数 增加了useFiles和useDa ...

  3. 错误Log日志的收集

    1.在Application里面初始化 AppCrashHandler.getInstance(this); 2.创建一个类 package com.lvshandian.partylive.util ...

  4. Nginx+PHP配置错误,日志:[error] 24324#0: *31 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

    一.问题现象 1.安装nginx.php.php-fpm后,浏览器访问php报错,“File not found”: 二.问题排查 1.检查nginx.php-fpm服务是否正常启动,均正常启动: 2 ...

  5. sql server 2008 r2 数据库操作时提示 9002错误“事物日志已满”问题

    事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志.但是,截断过程有时也可能发生延迟. ...

  6. Go基础编程实践(五)—— 错误和日志

    自定义错误类型 Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求.error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型. // error类型 ...

  7. Laravel错误与日志处理

    App\Exceptions\Handler class is where all exceptions triggered by your application are logged and th ...

  8. nginx error_log 错误日志配置说明

    nginx的error_log类型如下(从左到右:debug最详细 crit最少): [ debug | info | notice | warn | error | crit ] 例如:error_ ...

  9. [转]PHP错误日志

    对 于PHP开发者来说,一旦某个产品投入使用,应该立即将display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息 而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

随机推荐

  1. Servlet Request的 getInputStream() getReader() getParameter()

    如果你知道了这三者的区别,请忽略 最近碰到了servlet对入参获取方式的处理问题,因为二方库处理不当,导致了获取不到入参的情况,之前也知道这三个方法不兼容,现简单介绍下 1.这三个获取入参的方法,是 ...

  2. 先贴上代码:Random快排,快排的非递归实现

    设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为主元,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序.值得注意的是, ...

  3. python学习笔记-(三)条件判断和循环

    1.条件判断语句 Python中条件选择语句的关键字为:if .elif .else这三个.其基本形式如下: age_of_cc = 27 age = int(input("guessage ...

  4. WinForm------点击Control弹出MessageBox

    private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //弹 ...

  5. ef6 缓存的问题没有了

    public static void Main(string[] args) { PMTestEntities db = new PMTestEntities(); var users = db.Us ...

  6. ntp服务器搭建与客户端设置

    服务器对时间要求非常严格,linux服务器文件的生成,日志,以及数据库的连接都是根据时间的逻辑 进行任务处理,如果时间不同步,那么,处理的任务,以及出问题的分析日志,时间不对,很难分析 直接更改lin ...

  7. JavaWeb学习笔记——JDOM

    JavaDOC的网址:http://www.jdom.org/docs/apidocs/index.html import java.io.FileOutputStream; import org.j ...

  8. UML关系图

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

  9. AspNet Identity and IoC Container Registration

    https://github.com/trailmax/IoCIdentitySample TL;DR: Registration code for Autofac, for SimpleInject ...

  10. 百度编辑器修改,不让它自动替换html标签

    在ueditor.all.js中找到 UE.plugins['defaultfilter'] = function () 注释或删掉这块代码. 注:ueditor.all.min.js 中也一样,格式 ...