#### 異常捕捉
swoolefy在每個worker進程和task進程啟動時,會創建一個單一應用對象,同時會完成注冊自定義捕捉事件。
例如http的App.php中
~~~
/**
* $ExceptionHanderClass 異常處理類
* @var string
*/
private $ExceptionHanderClass = 'Swoolefy\\Core\\SwoolefyException';
/**
* __construct
* @param $config 應用層配置
*/
public function __construct(array $config=[]) {
// 將應用層配置保存在上下文的服務
$this->config = Swfy::$appConfig = $config;
// Component組件創建
parent::creatObject();
// 注冊錯誤處理事件
$exceptionClass = $this->getExceptionClass();
register_shutdown_function($exceptionClass.'::fatalError');
set_error_handler($exceptionClass.'::appError');
}
~~~
默認會使用swoolefy框架內置的`Swoolefy\Core\SwoolefyException`類處理異常捕捉事件。
例如默認處理如下:
~~~
/**
* shutHalt 錯誤輸出日志
* @param $error 錯誤
* @return void
*/
public static function shutHalt($errorMsg, $errorType = 'error') {
$logFilePath = rtrim(LOG_PATH,'/').'/runtime.log';
if(is_file($logFilePath)) {
$logFilesSize = filesize($logFilePath);
}
// 定時清除這個log文件
if($logFilesSize > 1024 * 20) {
@file_put_contents($logFilePath,'');
}
$log = new \Swoolefy\Tool\Log;
switch($errorType) {
case 'error':
$log->setChannel('Application')->setLogFilePath($logFilePath)->addError($errorMsg);
break;
case 'warning':
$log->setChannel('Application')->setLogFilePath($logFilePath)->addWarning($errorMsg);
break;
case 'notice':
$log->setChannel('Application')->setLogFilePath($logFilePath)->addNotice($errorMsg);
break;
case 'info':
$log->setChannel('Application')->setLogFilePath($logFilePath)->addInfo($errorMsg);
break;
}
return;
}
~~~
那么我們可以自定義自己的異常處理,配置項"
exception_handler"是一個異常處理類,只需要在應用層,繼承于`Swoolefy\Core\SwoolefyException`,可以重寫shutHalt函數,然后處理。比如,可以在這里處理接入日志系統graylog等。
<table><tr><td bgcolor=orange>
特別注意:
如果需要重寫,同時需要在協議層的配置文件中配置exception_handler,值為我們新定義的類,這個類要繼承Swoolefy\Core\SwoolefyException
</td></tr></table>
- 歡迎使用swoolefy
- 環境說明
- 開發部署
- 安裝
- 創建應用
- 啟動|停止服務
- nginx代理
- 創建Controller
- 應用結構
- App應用對象
- Event請求處理
- 超全局管理
- 熱更新
- inotify實現worker進程熱重啟
- http服務
- 應用層配置
- 協議層配置
- 路由規則
- 控制器
- 數據模型
- websocket服務
- 應用層配置
- 協議層配置
- 數據封裝格式
- 控制器
- 數據模型
- 二進制數據處理
- rpc服務
- 應用層配置
- 協議程配置
- 數據包協議格式
- 服務控制器
- 服務數據模型
- udp服務
- 應用層配置
- 協議層配置
- 數據包封裝格式
- 控制器
- 存在問題
- 常用組件
- log
- view
- session
- cache(redis)
- db(mysql)
- mongodb
- 其他服務管理
- 自定義進程管理
- 異步任務管理
- 內存表管理
- 定時器管理
- 異常捕捉處理
- 進程池管理
- systerm采集進程服務