Laravel5.1-错误和日志
简介
这一章也是属于文档写得比较混乱的一章,所以我决定重新组织一下内容结构;
配置
debug配置
我们都知道,开发环境应该把debug打开,生产环境应该把debug关闭;
这个设置在config/app.php
文件里,找到这一项:
'debug' => env('APP_DEBUG', false),
优先配置.env的值,后面是默认值。 true把debug打开,false关闭;
log模式配置
同样在config/app.php
文件里,找到:
'log' => 'single',
这里一个有4个可用选项值:"single", "daily", "syslog", "errorlog",
他们分别是:
- 单文件日志;
- 每日一文件日志;
- 系统日志;
- 错误日志;
处理错误对象及报错信息
看app\Exceptions\handler.php
这个文件,这是处理所有错误信息的关键文件:
namespace App\Exceptions;
use Exception;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
protected $dontReport = [
HttpException::class,
];
public function report(Exception $e)
{
return parent::report($e);
}
public function render($request, Exception $e)
{
return parent::render($request, $e);
}
}
一个属性,2个方法;
$dontReport
先来看$dontReport
属性,意思是不要log的错误信息,这里面填了HttpException::class
, 也就是说,404这种错误, 如果你在这里设置HttpException,laravel会触发,但不会记录的。
你还可以添加更多不报告的错误类;
report()
这个只是把错误对象传递一下,传到基类ExceptionHandler
中去,你也可以在这里面把错误类型发布到一些外部服务。
不明白什么意思就跳过,这里不常用;
render()
render()
是渲染错误视图的地方,我们主要的自定义逻辑写在这里;
我们最常见的错误类型可能就是:
ModelNotFoundException
于是我们可以这样写:
public function render($request, Exception $e)
{
switch($e){
case ($e instanceof ModelNotFoundException):
return response()->view('errors.404', [], 404);
break
default:
return parent::render($request, $e);
}
}
这样遇到这个ModelNotFoundException
错误类的时候,就会触发'errors.404'
这个视图;
自定义错误类
首先,在app\Exceptions\
里建立一个自定义类:
namespace App\Exceptions;
class CustomException extends \Exception
{
}
然后,在handler.php
的handler()
方法内,判断并处理CustomException
,显示相应的视图;
public function render($request, Exception $e)
{
switch($e){
case ($e instanceof ModelNotFoundException):
return response()->view('errors.404', [], 404);
break
case ($e instanceof CustomException):
return response()->view('errors.custom',['exception'=>$e]);
break
default:
return parent::render($request, $e);
}
}
触发自定义错误类
try{
App\User::find(-1);
}catch(){
throw new App\Exceptions\CustomException;
}
错误视图常用的一些显示错误的方法
@extends('template.master')
@section('content')
<h1>
@{{ $exception->getStatusCode() }}
</h1>
<p>
@if(!empty($exception->getMessage()))
@{{ $exception->getMessage() }}
@else
@{{ \Symfony\Component\HttpFoundation\Response::$statusTexts[$exception->getStatusCode()] }}
@endif
</p>
@endsection
HTTP错误
自定义http错误页面
发生http错误时,系统会先在resources/views/errors/
这个文件夹内找与http错误代码同名的blade文件,比如400错误就会找resources/views/errors/404.blade.php
, 所以自定义http错误显示页面,只要在resources/views/errors/
按照http错误代码号建立对应的blade文件就行了。
抛出http错误代码
一般,服务器上会设置什么时候抛出http错误代码,但你也可以手动抛出,方法是:
abort(401); abort(500);abort(403)
填上对应的错误代码号即可,这个方法在request的整个生命周期内都可用;
Logging
Laravel的日志功能基于强大的 Monolog 类库,默认情况下是每天生成一个日志文件的模式,日子文件存储在storage/logs
;
插入log信息
你可以在代码中向log日志插入信息,一共有这些方法可以使用:
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
代码示例:
public function showProfile($id)
{
Log::info('Showing user profile for user: '.$id);
return view('user.profile', ['user' => User::findOrFail($id)]);
}
上下文信息
Log::info('User failed to login.', ['id' => $user->id]);
你可以像这样插入第二个参数,数组内的信息将会被格式化,在log显示出来;
获取Monolog对象
$monolog = Log::getMonolog();
像这样获取Monolog对象,Monolog对象中有很多方法可以操作log信息。
Laravel5.1-错误和日志的更多相关文章
- 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题
背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...
- laravel中的错误与日志
日志 laravel中的日志是基于monolog而封装的.laravel在它上面做了几个事情: 把monolog中的addInfo等函数简化成为了info这样的函数 增加了useFiles和useDa ...
- 错误Log日志的收集
1.在Application里面初始化 AppCrashHandler.getInstance(this); 2.创建一个类 package com.lvshandian.partylive.util ...
- 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 ...
- sql server 2008 r2 数据库操作时提示 9002错误“事物日志已满”问题
事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志.但是,截断过程有时也可能发生延迟. ...
- Go基础编程实践(五)—— 错误和日志
自定义错误类型 Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求.error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型. // error类型 ...
- Laravel错误与日志处理
App\Exceptions\Handler class is where all exceptions triggered by your application are logged and th ...
- nginx error_log 错误日志配置说明
nginx的error_log类型如下(从左到右:debug最详细 crit最少): [ debug | info | notice | warn | error | crit ] 例如:error_ ...
- [转]PHP错误日志
对 于PHP开发者来说,一旦某个产品投入使用,应该立即将display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息 而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...
随机推荐
- uC/OS-II核心(Os_core)块
/*************************************************************************************************** ...
- 生成N个二进制位的组合
#include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include &l ...
- WinForm------点击Control弹出MessageBox
private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //弹 ...
- _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决 mysql安装python
在win7下安装了Python后,想安装python-MySQL,使用pip安装出现如下问题: >pip install MySQL-python _mysql.c(42) : fatal er ...
- Centos: 修改 yum安装的mysql路径
1.使用命令service mysqld stop 停止mysql查看mysql数据库的默认路径:/var/lib/mysql使用cp -afir /var/lib/mysql/* /usr/l ...
- 兼容IE的写法收集||bug修复
这篇文章实时更新 属于IE的专属写法 其中,S表示Standards Mode即标准模式,Q表示Quirks Mode,即兼容模式 hack 示例 IE6(S) IE6(Q) IE7(S) IE7(Q ...
- ecshop 版权问题 Powered by ECShop
将下代码 <div style="width:0px;height: 0px;overflow:hidden;">{foreach from=$lang.p_y ite ...
- WAMPSERVER 64位 win7下 php 5.5.12通过 PECL 安装 zip扩展
通过phpinfo()查看 php5.5.12默认集成了zip模块 不过版本是1.11.0 http://pecl.php.net/package/zip 通过PECL 查看 最新版本是1.12.4 ...
- IIS 8.5 伪静态去掉index.php thinkphp 3.2.2
因为测试都是在win下开发的 win8.1企业版 II8.5 首先安装 Thinkphp 3.2.2 URL Rewrite Module 2.0 http://www.iis.net/downlo ...
- JavaScript 面向对象程序设计(下)——继承与多态 【转】
JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...