补充:进程是 Fiber 协程环境。
我在 service 里写了会出异常的代码,控制器里调用,错误信息没有把controller到 service的链路打印出来。
这导致我无法定位问题代码,应该怎么做才能显示完整堆栈信息。
service 方法
public function getTopNsymbols(int $limit = 100): array
{
$api = 'http://a.com/index/json';
$httpClient = new Client();
$response = $httpClient->get($api);
$httpStatusCode = $response->getStatusCode();
$data = json_decode($response->getBody(), true);
if ($httpStatusCode == 429) {
throw new BusinessException("错误 429,访问频率超过限制", 5000);
}
if ($httpStatusCode == 418) {
throw new BusinessException("错误 418,IP 被封了", 5000);
}
if ($httpStatusCode !== 200) {
throw new BusinessException("其他错误" . $httpStatusCode, 5000);
}
uasort($data, function ($a, $b) {
return $b['quoteVolume'] <=> $a['quoteVolume'];
});
return array_slice($data, 0, $limit);
}
controller 方法
public function test(Request $request)
{
$demoService = new DemoService();
$data = $demoService->getTopNsymbols(10);
var_dump($data);
return json($data);
}
页面报错内容:
错误日志内容:
其实是在这里抛出的异常,你没有进行拦截,所以在这里中断了。
只能防御性编程,try 起来吗?
我想要代码里没有严谨的 try 到的部分,也全部能被日志记录起来,应该怎么做呐
换成这个客户端就有完整的日志了:https://www.workerman.net/plugin/94
我有点迷茫了。
你这里导入的是那个?
https://www.workerman.net/doc/workerman/components/workerman-http-client.html
是这个吗?
是的