Skip to content

错误与日志

配置

应用程序的日志记录功能在 Illuminate\Foundation\Bootstrap\ConfigureLogging 启动类中配置。此类利用 config/app.php 配置文件中的 log 配置选项。

默认情况下,日志记录器配置为使用每日日志文件;然而,您可以根据需要自定义此行为。由于 Laravel 使用流行的 Monolog 日志库,您可以利用 Monolog 提供的各种处理程序。

例如,如果您希望使用单个日志文件而不是每日文件,可以对 config/app.php 配置文件进行以下更改:

php
'log' => 'single'

Laravel 开箱即支持 singledailysyslogerrorlog 日志模式。然而,您可以通过重写 ConfigureLogging 启动类来自定义应用程序的日志记录。

错误详情

应用程序通过浏览器显示的错误详情量由 config/app.php 配置文件中的 app.debug 配置选项控制。默认情况下,此配置选项设置为遵循存储在 .env 文件中的 APP_DEBUG 环境变量。

对于本地开发,您应将 APP_DEBUG 环境变量设置为 true在生产环境中,此值应始终为 false

处理错误

所有异常由 App\Exceptions\Handler 类处理。此类包含两个方法:reportrender

report 方法用于记录异常或将其发送到外部服务,如 BugSnag。默认情况下,report 方法只是将异常传递给父类的基本实现,在那里记录异常。然而,您可以根据需要记录异常。如果您需要以不同方式报告不同类型的异常,可以使用 PHP 的 instanceof 比较运算符:

php
/**
 * 报告或记录异常。
 *
 * 这是将异常发送到 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 错误。为了返回这样的响应,请使用以下方法:

php
abort(404);

可选地,您可以提供一个响应:

php
abort(403, 'Unauthorized action.');

此方法可在请求生命周期的任何时候使用。

自定义 404 错误页面

要为所有 404 错误返回自定义视图,请创建一个 resources/views/errors/404.blade.php 文件。此视图将在应用程序生成的所有 404 错误时提供。

日志记录

Laravel 的日志记录功能在强大的 Monolog 库之上提供了一个简单的层。默认情况下,Laravel 配置为为您的应用程序创建每日日志文件,这些文件存储在 storage/logs 目录中。您可以像这样写入日志信息:

php
Log::info('这是一些有用的信息。');

Log::warning('可能出现问题。');

Log::error('确实出现了问题。');

日志记录器提供了 RFC 5424 中定义的七个日志级别:debuginfonoticewarningerrorcriticalalert

还可以将上下文数据数组传递给日志方法:

php
Log::info('日志消息', ['context' => '其他有用的信息']);

Monolog 有多种额外的处理程序可用于日志记录。如果需要,您可以访问 Laravel 使用的底层 Monolog 实例:

php
$monolog = Log::getMonolog();

您还可以注册一个事件来捕获传递给日志的所有消息:

注册日志事件监听器

php
Log::listen(function($level, $message, $context)
{
	//
});