# 错误与记录
### 介绍
首次开始使用OctoberCMS时,已经为您配置了错误和异常处理。有两种方法可以访问事件日志:
1. 通过打开文件,可以在文件系统中查看事件日志`storage/logs/system.log`。
2. 或者,可以通过“管理”区域导航至“*系统”>“日志”>“事件日志”*来查看它。
总是在显示错误页面和某些[异常类型](https://octobercms.com/docs/services/error-log#exception-types)时创建日志条目。
### [](https://octobercms.com/docs/services/error-log#configuration)组态
#### 错误详情
您的应用程序通过浏览器显示的错误详细信息数量由配置文件中的`debug`配置选项控制`config/app.php`。默认情况下,详细错误报告处于打开状态*,*因此有助于查看详细的错误信息,这对于调试和故障排除很有用。关闭此功能后,如果页面出现问题,将显示一般错误消息。
对于本地开发,应将`debug`值设置为`true`。在您的生产环境中,此值应始终为`false`。
~~~
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => false,
~~~
#### 日志文件模式
十月的支持`single`,`daily`,`syslog`和`errorlog`记录模式。例如,如果您希望使用每日日志文件而不是单个文件,则只需`log`在`config/app.php`配置文件中设置值:
~~~
'log' => 'daily'
~~~
### [](https://octobercms.com/docs/services/error-log#exception-types)可用的例外
10月提供了几种基本的异常类型。
### [](https://octobercms.com/docs/services/error-log#application-exception)应用程序异常
`October\Rain\Exception\ApplicationException`别名为的类`ApplicationException`是最简单的应用程序条件失败时使用的最常见的异常类型。
~~~
throw new ApplicationException('You must be logged in to do that!');
~~~
错误消息将被简化,并且将永远不会包含任何敏感信息,例如php文件和行号。
### [](https://octobercms.com/docs/services/error-log#system-exception)系统异常
`October\Rain\Exception\SystemException`别名为的类`SystemException`用于对系统运行至关重要的错误,并且始终记录这些错误。
~~~
throw new SystemException('Unable to contact the mail server API');
~~~
引发此异常时,将显示详细的错误消息,并显示发生的文件和行号。
### [](https://octobercms.com/docs/services/error-log#validation-exception)验证异常
`October\Rain\Exception\ValidationException`别名为的类`ValidationException`用于与表单提交和无效字段直接相关的错误。该消息应包含带有字段和错误消息的数组。
~~~
throw new ValidationException(['username' => 'Sorry that username is already taken!']);
~~~
您还可以传递[验证服务](https://octobercms.com/docs/services/validation)的实例。
~~~
$validation = Validator::make(...);
if ($validation->fails()) {
throw new ValidationException($validation);
}
~~~
抛出此异常时,[AJAX框架](https://octobercms.com/docs/ajax/introduction)将以可用格式提供此信息,并将焦点放在第一个无效字段上。
### [](https://octobercms.com/docs/services/error-log#ajax-exception)AJAX例外
`October\Rain\Exception\AjaxException`别名为的类`AjaxException`被认为是“智能错误”,它将返回HTTP代码406。这使它们可以像成功响应一样传递响应内容。
~~~
throw new AjaxException(['#flashMessages' => $this->renderPartial(...)]);
~~~
抛出此异常时,[AJAX框架](https://octobercms.com/docs/ajax/introduction)将遵循标准错误工作流程,但还将刷新指定的部分。
### [](https://octobercms.com/docs/services/error-log#exception-handling)异常处理
所有异常均由`October\Rain\Foundation\Exception\Handler`该类处理。此类包含两种方法:`report`和`render`指示是否应记录错误以及如何响应错误。
但是,如果需要,可以使用`App::error`方法指定自定义处理程序。根据处理程序所处理的异常的类型提示来调用处理程序。例如,您可以创建一个仅处理`RuntimeException`实例的处理程序:
~~~
App::error(function(RuntimeException $exception) {
// Handle the exception...
});
~~~
如果异常处理程序返回响应,则该响应将被发送到浏览器,并且不会调用其他错误处理程序:
~~~
App::error(function(InvalidUserException $exception) {
return 'Sorry! Something is wrong with this account!';
});
~~~
要侦听PHP致命错误,可以使用以下`App::fatal`方法:
~~~
App::fatal(function($exception) {
//
});
~~~
如果您有多个异常处理程序,则应将它们定义为从最普通到最具体。因此,例如,`Exception`应在自定义异常类型(如)之前定义处理所有类型异常的处理程序`SystemException`。
### 错误处理程序的位置
错误处理程序注册(如[事件处理程序](https://octobercms.com/docs/services/events))通常属于“引导程序代码”类别。换句话说,它们使您的应用程序准备好实际处理请求,并且通常需要在实际调用路由或控制器之前执行该应用程序。最常见的地方是[插件注册文件](https://octobercms.com/docs/plugin/registration#registration-methods)的`boot`方法。另外,插件可以在插件目录中提供一个名为**init.php**的文件,您可以使用该文件来放置错误处理程序注册。[](https://octobercms.com/docs/plugin/registration#registration-methods)
### [](https://octobercms.com/docs/services/error-log#http-exceptions)HTTP异常
一些异常描述了服务器的HTTP错误代码。例如,这可能是“找不到页面”错误(404),“未经授权的错误”(401),甚至是开发人员生成的500错误。为了从您的应用程序中的任何位置生成这样的响应,请使用以下命令:
~~~
App::abort(404);
~~~
该`abort`方法将立即引发一个异常,该异常将由异常处理程序呈现。(可选)您可以提供响应文本:
~~~
App::abort(403, 'Unauthorized action.');
~~~
在请求的生命周期中,可以随时使用此方法。
### [](https://octobercms.com/docs/services/error-log#custom-error-page)自定义错误页面
默认情况下,任何错误都会显示在详细的错误页面上,其中包含错误发生的文件内容,行号和堆栈跟踪。通过在脚本中将配置值设置`debug`为**false**`config/app.php`并使用URL创建页面,可以显示自定义错误页面`/error`。
### [](https://octobercms.com/docs/services/error-log#logging)记录中
默认情况下,十月配置为为您的应用程序创建一个日志文件,该文件存储在`storage/logs`目录中。您可以使用`Log`外观将信息写入日志:
~~~
$user = User::find(1);
Log::info('Showing user profile for user: '.$user->name);
~~~
记录器提供了[RFC 5424中](http://tools.ietf.org/html/rfc5424)定义的八个记录级别:**紧急**,**警报**,**严重**,**错误**,**警告**,**通知**,**信息**和**调试**。
~~~
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方法。此上下文数据将被格式化并与日志消息一起显示:
~~~
Log::info('User failed to login.', ['id' => $user->id]);
~~~
### [](https://octobercms.com/docs/services/error-log#helpers)辅助功能
有一些全局帮助器方法可简化日志记录。该`trace_log`函数是别名`Log::info`,支持使用数组和异常作为消息。
~~~
// Write a string value
$val = 'Hello world';
trace_log('The value is '.$val);
// Dump an array value
$val = ['Some', 'array', 'data'];
trace_log($val);
// Trace an exception
try {
//
}
catch (Exception $ex) {
trace_log($ex);
}
~~~
该`trace_sql`函数启用数据库日志记录,调用该函数时将记录发送到数据库的每个命令。这些记录仅出现在`system.log`文件中,而不会出现在管理区域日志中,因为它存储在数据库中,并且会导致反馈循环。
~~~
trace_sql();
Db::table('users')->count();
// select count(*) as aggregate from users
~~~
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图