補充:進程是 Fiber 協(xié)程環(huán)境。
我在 service 里寫了會出異常的代碼,控制器里調(diào)用,錯誤信息沒有把controller到 service的鏈路打印出來。
這導(dǎo)致我無法定位問題代碼,應(yīng)該怎么做才能顯示完整堆棧信息。
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);
}
頁面報錯內(nèi)容:
錯誤日志內(nèi)容:
$api = 'http://a.com/index/json';
$httpClient = new Client();
$response = $httpClient->get($api);
其實是在這里拋出的異常,你沒有進行攔截,所以在這里中斷了。
換成這個客戶端就有完整的日志了:http://www.wtbis.cn/plugin/94
我有點迷茫了。
你這里導(dǎo)入的是那個?
http://www.wtbis.cn/doc/workerman/components/workerman-http-client.html
是這個嗎?
composer require workerman/http-client
$httpClient = new Client();
$response = $httpClient->get($api);