# 錯誤與記錄
### 介紹
首次開始使用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 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖