Laravel Laravel
  • 前言

    • 发行说明
    • 升级向导
    • 贡献导引
    • API 文档
  • 安装

    • 安装
    • Homestead
  • 教程

    • 初级任务列表
    • 中级任务列表
  • 基本功能

    • 路由
    • 中间件
    • 控制器
    • 请求
    • 响应
    • 视图
    • Blade 模板
  • 系统架构

    • 请求生命周期
    • 应用程序结构
    • 服务提供者
    • 服务容器
    • Contracts:契约
    • Facades:门面
  • 服务

    • 身份认证
    • 授权
    • Artisan 命令行
    • 交易
    • 缓存
    • 集合
    • Elixir
    • 加密
    • 错误 & 日志
    • 事件
    • 文件系统与云存储
    • 哈希
    • 辅助函数
    • 本地化
    • Mail
    • 扩展包开发
    • 分页
    • 队列
    • Redis
    • Session
    • SSH 任务
    • 任务调度
    • 测试
    • 表单验证
  • 数据库

    • 入门
    • 查询构造器
    • 数据库迁移
    • 数据填充
  • Eloquent ORM

    • 入门
    • 关联关系
    • Eloquent 集合
    • 修改器
    • 序列化
Icon

提示 您正在浏览旧版本的 Laravel 的文档. 请考虑将你的项目升级到 Laravel 11.x.

0 1

错误与日志
5.1
8.x 7.x 6.x 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1

Laravel 5.1 中文文档 /

未匹配的标注
本文档最新版为 8.x,旧版本可能放弃维护,推荐阅读最新版!

错误与日志

  • 简介
  • 设置
  • 错误处理
    • 报告方法
    • 呈现方法
  • HTTP 异常
    • 自定义 HTTP 错误页面
  • 日志

简介

当你开始一个新的 Laravel 项目时,Laravel 已经帮你配置好错误和异常处理的操作。另外,Laravel 也集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能。

设置

错误细节

你的应用程序通过 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;

错误处理

所有的异常处理都是通过 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);
}

借助类型忽略异常

异常处理中的 $dontReport 属性是一个数组,包含不需要被记录的异常类型。默认情况下,由 404 错误导致的异常结果并不会被记录到日志文件。你可以根据你的需求增加其它异常类型到这个数组中。

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);
}

HTTP 异常

有一些异常是用于描述来自服务器的 HTTP 错误码。例如,这可能是个「找不到页面」错误(404),「未授权错误」(401),或甚至是开发者导致的 500 错误。你可以使用以下方法在应用程序的任何地方生成响应:

abort(404);

abort 方法通过错误处理将会立即引发异常,并且呈现错误。或者,你可以提供响应的文本消息:

abort(403, 'Unauthorized action.');

你可以在请求的生命周期中的任何时间点使用这个方法。

自定义 HTTP 错误页面

你可以简单的对于各种不同的 HTTP 状态码返回自定义的错误视图。例如,如果你想要自定义 HTTP 404 状态码的错误视图,则可以创建一个 resources/views/errors/404.blade.php 文件。应用程序将会使用这个视图处理所有发生的 404 错误。

在这个目录下的视图,命名应该匹配对应到 HTTP 状态码。

日志

Laravel 日志工具在强大的 Monolog 函数库上提供多一层简单的功能。Laravel 默认为应用程序创建每日的日志文件并保存在 storage/logs 目录。你可以使用 Log facade 来将信息写入到日志上:

<?php

namespace 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 支持各式各样的附加处理方法。如果需要的话,可以访问 Laravel 底层的 Monolog 实例:

$monolog = Log::getMonolog();

本文章首发在 网站上。

上一篇 下一篇

成为Laravel合作伙伴

Laravel Partners是提供一流Laravel开发和咨询服务的精英商店。我们每个合作伙伴都可以帮助您制定一个精美,结构完善的项目.

我们的伙伴
Laravel
亮点
  • Our Team
  • 发布说明
  • 入门
  • 路由
  • Blade 模板
  • 身份验证
  • 用户授权
  • Artisan 控制台
  • 数据库
  • Eloquent ORM
  • 测试
资源
  • Laravel Bootcamp
  • Laracasts
  • Laravel News
  • Laracon
  • Laracon EU
  • Laracon India
  • Jobs
  • Forums
  • Trademark
  • 版本发布时间
  • 包开发
  • 命令行应用
  • TALL stack全栈开发
  • Blade UI Kit
  • 前端资源构建
伙伴
  • WebReinvent
  • Vehikl
  • Tighten
  • 64 Robots
  • Active Logic
  • Byte 5
  • Curotec
  • Cyber-Duck
  • DevSquad
  • Jump24
  • Kirschbaum
生态系统
  • Cashier
  • Dusk
  • Echo
  • Envoyer
  • Forge
  • Horizon
  • Nova
  • Octane
  • Sail
  • Sanctum
  • Scout
  • Spark
  • Telescope
  • Valet
  • Vapor

Laravel是一个具有表达力,优雅语法的Web应用程序框架。我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。Laravel试图通过减轻大多数Web项目中使用的常见任务来减轻开发的痛苦.

Laravel是Taylor Otwell的商标.
Copyright © 2011-2025 Laravel中文网 LLC.

  • Twitter
  • GitHub
  • Discord
Laravel 全栈开发网 推荐使用阿里云 按Ctrl+D试试