经本人实践总结 使用 Easyswoole 自带的异常 更适合处理后台进程任务的异常捕获。并不适合在http服务中做异常处理。。
1、创建 后台任务全局异常捕获类。
# 在 /App/Exception 目录下创建 HandleTrigger.php
<?php
namespace App\Exception;
use EasySwoole\EasySwoole\Logger;
use EasySwoole\Trigger\Location;
use EasySwoole\Component\Singleton;
use EasySwoole\Trigger\TriggerInterface;
/**
* 做后台任务全局异常捕获
*/
class HandleTrigger implements TriggerInterface
{
use Singleton;
public function error($msg, int $errorCode = E_USER_ERROR, Location $location = null)
{
Logger::getInstance()->error('Error:'.$msg);
var_dump($location->getFile()); // 打印抛出异常的来源文件
var_dump($location->getLine()); // 行数
// TODO: Implement error() method.
}
public function throwable(\Throwable $throwable)
{
Logger::getInstance()->console('这是自定义输出的异常:'.$throwable->getMessage());
// TODO: Implement throwable() method.
}
}
2、注册全局异常处理类
在框架启动的 bootstrap.php 文件中 注册
// 注册后台进程自定义异常类
\EasySwoole\EasySwoole\Trigger::getInstance(new \App\Exception\HandleTrigger());
3 . 在后台运行脚本中触发异常
重点: 该种形式触发异常,脚本还会继续运行。 与传统的手工抛异常 throw new ... 组织脚本运行不同
// 触发 HandleTrigger 类的 error 方法
\App\Exception\HandleTrigger::getInstance()->error("xxx" );
// 触发 HandleTrigger 类的 throwable 方法
\App\Exception\HandleTrigger::getInstance()->throwable(new \Exception("xxx"));
总结:
传统的 throw 抛出异常会阻止程序的运行。
easyswoole 可通过 Trigger 触发的异常,不会终止程序的运行。
网友评论