diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a72b143bfe2e72ae14a0c2e190cf9296d193d5d..fd18473c21356b276aa470aab95fb7affda58ea0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### [1.2.2] - 2024-11-25 +### Fixed +- Memory consumption in api client - logger calls consumes memory, specially when large responses are logged + ## [1.2.1] - 2020-12-08 ### Fixed - default headers should overwrite build in headers diff --git a/src/Client/ClientImplementation.php b/src/Client/ClientImplementation.php index b2bac6ca774649ec070b0988b7eb531414b7aaf6..a749f924b6e2276a74e0e838c898842dc8ecba82 100644 --- a/src/Client/ClientImplementation.php +++ b/src/Client/ClientImplementation.php @@ -4,6 +4,7 @@ namespace WPDesk\ApiClient\Client; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; use WPDesk\HttpClient\HttpClient; use WPDesk\HttpClient\HttpClientResponse; use WPDesk\ApiClient\Request\Request; @@ -36,6 +37,9 @@ class ClientImplementation implements Client, LoggerAwareInterface /** @var int */ private $timeout; + /** @var bool */ + private $is_logger_available = false; + /** * Client constructor. * @param HttpClient $client @@ -59,6 +63,7 @@ class ClientImplementation implements Client, LoggerAwareInterface $this->apiUrl = $apiUri; $this->defaultRequestHeaders = $defaultRequestHeaders; $this->timeout = $timeout; + $this->is_logger_available = ! $logger instanceof NullLogger; } /** @@ -70,8 +75,10 @@ class ClientImplementation implements Client, LoggerAwareInterface */ public function sendRequest(Request $request) { - $this->logger->debug("Sends request with METHOD: {$request->getMethod()}; to ENDPOINT {$request->getEndpoint()}", - $this->getLoggerContext()); + if ($this->is_logger_available) { + $this->logger->debug("Sends request with METHOD: {$request->getMethod()}; to ENDPOINT {$request->getEndpoint()}", + $this->getLoggerContext()); + } try { $httpResponse = $this->client->send( $fullUrl = $this->prepareFullUrl($request), @@ -81,11 +88,16 @@ class ClientImplementation implements Client, LoggerAwareInterface $this->timeout ); - $this->logger->debug( - "Sent request with: URL: {$fullUrl};\n METHOD: {$method};\n BODY: {$body};\n" - . "HEADERS: " . json_encode($headers) . "\n\n and got response as CODE: {$httpResponse->getResponseCode()};\n" - . "with RESPONSE BODY {$httpResponse->getBody()}", - $this->getLoggerContext()); + if ($this->is_logger_available) { + $this->logger->debug( + "Sent request with: URL: {$fullUrl};\n METHOD: {$method};\n BODY: {$body};\n" + ."HEADERS: ".json_encode( + $headers + )."\n\n and got response as CODE: {$httpResponse->getResponseCode()};\n" + ."with RESPONSE BODY {$httpResponse->getBody()}", + $this->getLoggerContext() + ); + } return $this->mapHttpResponseToApiResponse($httpResponse); @@ -218,4 +230,4 @@ class ClientImplementation implements Client, LoggerAwareInterface } -} \ No newline at end of file +}