我在基于 laravel 的应用程序中使用外部作曲家包。
我想捕获从此包抛出的异常,并记录这些异常的其他错误详细信息。
异常被抛出在特征中:
namespace Some\Package\File;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\RequestOptions;
use Some\Package\Exceptions\CustomException;
trait SendHTTPRequests
{
public function call(string $method, string $path, string $payload = '')
{
try {
$response = $this->getClient()->request($method, $this->getCallableUrl($path, $query), [
RequestOptions::BODY => $payload,
]);
} catch (ClientException $e) {
$errorPayload = json_decode((string) $e->getResponse()->getBody(), true);
throw new CustomException(
$e->getMessage(),
$errorPayload['code'] ?? 0,
$errorPayload
);
}
return $response;
}
}
如您所见,异常可以是
ClientException
(Guzzle)类型或 CustomException
类型,向消息添加额外数据的最佳方法是什么?
我应该覆盖特征还是应该在
register
的Handler.php
方法中包含一个自定义“catch”并为两者抛出一个OwnCustomException
并将我的日志逻辑包含到这个exception
中?
我现在已经将它用于我正在使用的另一个 customPackage:
//catch all FTPpackage exceptions
if ((new \ReflectionClass($e))->getNamespaceName() == 'FTPUploader\Exceptions')
throw new \App\Exceptions\OwnFTPUploaderException($e);
但是我对如何捕获类型
ClientException
的异常感到困惑,因为它们直接来自 guzzle,这肯定会造成麻烦,我不确定如何解决这个问题。
哪种方法最有意义?