错误与日志
配置
应用程序的日志记录功能在 Illuminate\Foundation\Bootstrap\ConfigureLogging
启动类中配置。此类利用 config/app.php
配置文件中的 log
配置选项。
默认情况下,日志记录器配置为使用每日日志文件;然而,您可以根据需要自定义此行为。由于 Laravel 使用流行的 Monolog 日志库,您可以利用 Monolog 提供的各种处理程序。
例如,如果您希望使用单个日志文件而不是每日文件,可以对 config/app.php
配置文件进行以下更改:
'log' => 'single'
Laravel 开箱即支持 single
、daily
、syslog
和 errorlog
日志模式。然而,您可以通过重写 ConfigureLogging
启动类来自定义应用程序的日志记录。
错误详情
应用程序通过浏览器显示的错误详情量由 config/app.php
配置文件中的 app.debug
配置选项控制。默认情况下,此配置选项设置为遵循存储在 .env
文件中的 APP_DEBUG
环境变量。
对于本地开发,您应将 APP_DEBUG
环境变量设置为 true
。在生产环境中,此值应始终为 false
。
处理错误
所有异常由 App\Exceptions\Handler
类处理。此类包含两个方法:report
和 render
。
report
方法用于记录异常或将其发送到外部服务,如 BugSnag。默认情况下,report
方法只是将异常传递给父类的基本实现,在那里记录异常。然而,您可以根据需要记录异常。如果您需要以不同方式报告不同类型的异常,可以使用 PHP 的 instanceof
比较运算符:
/**
* 报告或记录异常。
*
* 这是将异常发送到 Sentry、Bugsnag 等的好地方。
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
if ($e instanceof CustomException)
{
//
}
return parent::report($e);
}
render
方法负责将异常转换为应发送回浏览器的 HTTP 响应。默认情况下,异常被传递给基类,基类为您生成响应。然而,您可以检查异常类型或返回自己的自定义响应。
异常处理程序的 dontReport
属性包含一个异常类型数组,这些类型的异常不会被记录。默认情况下,由 404 错误导致的异常不会写入日志文件。您可以根据需要将其他异常类型添加到此数组中。
HTTP 异常
某些异常描述来自服务器的 HTTP 错误代码。例如,这可能是“页面未找到”错误(404)、“未授权错误”(401)或甚至是开发人员生成的 500 错误。为了返回这样的响应,请使用以下方法:
abort(404);
可选地,您可以提供一个响应:
abort(403, 'Unauthorized action.');
此方法可在请求生命周期的任何时候使用。
自定义 404 错误页面
要为所有 404 错误返回自定义视图,请创建一个 resources/views/errors/404.blade.php
文件。此视图将在应用程序生成的所有 404 错误时提供。
日志记录
Laravel 的日志记录功能在强大的 Monolog 库之上提供了一个简单的层。默认情况下,Laravel 配置为为您的应用程序创建每日日志文件,这些文件存储在 storage/logs
目录中。您可以像这样写入日志信息:
Log::info('这是一些有用的信息。');
Log::warning('可能出现问题。');
Log::error('确实出现了问题。');
日志记录器提供了 RFC 5424 中定义的七个日志级别:debug、info、notice、warning、error、critical 和 alert。
还可以将上下文数据数组传递给日志方法:
Log::info('日志消息', ['context' => '其他有用的信息']);
Monolog 有多种额外的处理程序可用于日志记录。如果需要,您可以访问 Laravel 使用的底层 Monolog 实例:
$monolog = Log::getMonolog();
您还可以注册一个事件来捕获传递给日志的所有消息:
注册日志事件监听器
Log::listen(function($level, $message, $context)
{
//
});