[ Laravel 5.2 文档 ] 服务 -- 错误&日志
1、简介
Laravel默认已经为我们配置好了错误和异常处理,此外,Laravel还集成了 Monolog日志库以便提供多种功能强大的日志处理器。
2、配置
错误详情显示
配置文件 config/app.php中的 debug配置选项控制浏览器显示的错误详情数量。默认情况下,该配置选项被设置在 .env文件中的环境变量 APP_DEBUG。
对本地开发而言,你应该设置环境变量 APP_DEBUG值为 true。在生产环境,该值应该被设置为 false。
日志模式
Laravel支持日志方法 single, daily, syslog和 errorlog。例如,如果你想要日志文件按日生成而不是生成单个文件,应该在配置文件 config/app.php中设置 log值如下:
'log' => 'daily'
自定义Monolog配置
如果你想要在应用中完全控制Monolog的配置,可以使用应用的 configureMonologUsing方法。你应该在 bootstrap/app.php文件返回 $app变量之前调用该方法:
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...);});return $app;
3、异常处理器
所有异常都由类 App\Exceptions\Handler处理,该类包含两个方法: report和 render。下面我们详细阐述这两个方法。
3.1 report方法
report方法用于记录异常并将其发送给外部服务如 Bugsnag。默认情况下, report方法只是将异常传递给异常被记录的基类,你可以随心所欲的记录异常。
例如,如果你需要以不同方式报告不同类型的异常,可使用PHP的 instanceof比较操作符:
/** * 报告或记录异常 * * 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错误异常不会被写到日志文件,如果需要的话你可以添加其他异常类型到这个数组。
3.2 render方法
render方法负责将给定异常转化为发送给浏览器的HTTP响应,默认情况下,异常被传递给为你生成响应的基类。然而,你可以随心所欲地检查异常类型或者返回自定义响应:
/** * 将异常渲染到HTTP响应中 * * @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),“认证失败错误”( 401)亦或是程序出错造成的 500错误,为了在应用中生成这样的响应,使用如下方法:
abort(404);
abort方法会立即引发一个会被异常处理器渲染的异常,此外,你还可以像这样提供响应描述:
abort(403, 'Unauthorized action.');
该方法可在请求生命周期的任何时间点使用。
自定义HTTP错误页面
Laravel使得返回多种HTTP状态码的错误页面变得简单,例如,如果你想要自定义 404错误页面,创建一个 resources/views/errors/404.blade.php文件,给文件将会渲染程序生成的所有 404错误。
改目录下的视图命名应该和相应的HTTP状态码相匹配。
5、日志
Laravel日志工具基于强大的Monolog库,默认情况下,Laravel被配置为在 storage/logs目录下每日为应用生成日志文件,你可以使用 Log门面编写日志信息到日志中:
<?phpnamespace App\Http\Controllers;use Log;use App\User;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中定义的八种日志级别: 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有多个可用于日志的处理器,如果需要的话,你可以访问底层Monolog实例:
$monolog = Log::getMonolog();

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











There are four main error types in PHP: 1.Notice: the slightest, will not interrupt the program, such as accessing undefined variables; 2. Warning: serious than Notice, will not terminate the program, such as containing no files; 3. FatalError: the most serious, will terminate the program, such as calling no function; 4. ParseError: syntax error, will prevent the program from being executed, such as forgetting to add the end tag.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

HTTP request methods include GET, POST, PUT and DELETE, which are used to obtain, submit, update and delete resources respectively. 1. The GET method is used to obtain resources and is suitable for read operations. 2. The POST method is used to submit data and is often used to create new resources. 3. The PUT method is used to update resources and is suitable for complete updates. 4. The DELETE method is used to delete resources and is suitable for deletion operations.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

In PHPOOP, self:: refers to the current class, parent:: refers to the parent class, static:: is used for late static binding. 1.self:: is used for static method and constant calls, but does not support late static binding. 2.parent:: is used for subclasses to call parent class methods, and private methods cannot be accessed. 3.static:: supports late static binding, suitable for inheritance and polymorphism, but may affect the readability of the code.

PHP handles file uploads through the $\_FILES variable. The methods to ensure security include: 1. Check upload errors, 2. Verify file type and size, 3. Prevent file overwriting, 4. Move files to a permanent storage location.
