#### 异常捕捉
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采集进程服务