Errors & Logging
来源:互联网 发布:sql中的distinct 编辑:程序博客网 时间:2024/06/04 00:49
Errors & Logging
1. 介绍
当启动新项目时,错误和异常处理已经配置好了。另外,Laravel跟Monolog这个日志库集成的,这个库提供了大量的功能强大的log处理器。
2.配置
Error Detail
应用通过浏览器显示的错误细节的数量是通过在config/app.php
中的debug
配置项控制的。默认情况下,这个配置项是遵从APP_DEBUG
环境变量的,环境变量保存在.env
文件中。
对于开发者,应该将APP_DEBUG
设置为true
,在生产环境,应该设置为false
。
Log Modes
不需要经过配置,Laravel支持signle
, daily
, syslog
, errorlog
等几种日志模式。例如,如果需要使用daily日志文件取代single日志文件,只需要将config\app.php
配置文件中的log
设置一下就可以。
`log` => 'daily',
Custom Monolog Configuration
可以通过使用应用的configureMonologUsing
方法来对Monolog进行完全的控制。在bootstrap/app.php
文件中的$app
返回之前,调用这个方法即可。
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...);});
3.异常处理
所有的异常都是被App\Exception\Handler
类来处理的,这个类包含两个方法:report
和renderMethod
。
3.1 Report方法
report
方法用来记录异常,并将异常发送到外部服务,例如BugSnag
。默认情况下,report
方法只是简单的将异常传递给记录异常的基础的类。然而,我们可以依据自己的想法来记录所有的异常。
例如,如果需要对各种exception单独处理,可以使用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);}
忽略某些类型的exception
Handler类的$dontReport
属性用来记录不需要记录日志的异常类型。默认情况下,404错误的异常不会被记录到log文件中。可以按需添加任何的exception到这个数组中。
3.2 Render方法
render
方法是用来将一个给定的exception转化为一个HTTP响应,并将这个响应返回到浏览器。默认情况下,异常传送给生成响应的一个基类,但是,你也可以根据异常类型不同返回定制的响应。
/** * 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);}
4.HTTP异常
一些异常描述了服务器端的HTTP错误码,例如,404(page not found),401(unauthorized error)甚至500错误。为了在应用中的任何地方都能生成这样的响应,利用如下代码:
abort(404);
abort
方法会立刻生成一个异常,并被异常处理器的render方法处理。可以提供响应的文字:
abort(403, 'Unauthorized action.');
这个方法可以在request的生命周期的任何时候调用。
自定义HTTP错误页(Custom HTTP Error Pages)
使用Laravel,可以很容易的对不同的HTTP状态码生成不同的错误页。例如,如果想自定义404页面,创建文件resources\views\errors\404.blade.php
,这个页面会被应用产生的所有404错误使用。
在这个目录中的视图,需要被命名为匹配HTTP状态码。
5.日志
Laravel的日志记录功能提供了基于功能强大Monolog的简单的封装。默认情况下,laravel创建每日log,并保存在storage/logs
目录下。可以使用Log
外观模式来写入log。
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)]); } }
log提供了RFC5424中定义的八种log等级。emergency, alert, critical, error, warning, notice, info, dubug
Log::emergency($error); Log::alert($error); Log::critical($error); Log::error($error); Log::warning($error); Log::notice($error); Log::info($error); Log::debug($error);
上下文信息(Contextual Information)
可以传递一个上下文相关的数据给log方法,这些上下文数据会被格式化后显示在log信息中
Log::info('User failed to login.', ['id' => $user->id]);
访问底层的Monolog实例(Accessing the underlying Monolog Instance)
Monolog提供了大量的处理器老记录log。使用如下方式获取实例。
$monolog = Log::getMonolog();
- Errors & Logging
- ELMAH and API controller in MVC4 not logging errors
- Errors
- errors
- errors
- errors
- Logging
- Logging
- logging
- Logging
- logging
- logging
- Hive 查询报错:No log4j2 configuration file found. Using default configuration: logging only errors to th
- Errors: Linux System Errors
- Errors: Linux System Errors
- Errors: Linux System Errors
- Errors: Linux System Errors
- errors标签
- 数据加密介绍<1>
- kNN算法python代码学习2-手写识别系统
- android.断开SVN连接 清理.svn文件夹
- PAT研究生入学考试2015.03第三题Insertion or Heap Sort (25) 题解
- iOS开发技术分享】协议与代理
- Errors & Logging
- js 数组sort()
- 计划看一本英文版的Python基础教程
- 第四周-项目4-建立双链表算法库
- 第三周项目二 建设“顺序表”的算法库
- Javascript高性能动画与页面渲染
- URAL 1210 Kind Spirits (DP动态规划)
- 2015北京网赛 Mission Impossible 6
- qml学习-----------GroupBox(分组框)和ComboBox(组合框)