diff --git a/src/OpenFeatureClient.php b/src/OpenFeatureClient.php index 0f90aab..44d5d95 100644 --- a/src/OpenFeatureClient.php +++ b/src/OpenFeatureClient.php @@ -38,7 +38,6 @@ use function array_merge; use function array_reverse; -use function sprintf; class OpenFeatureClient implements Client, LoggerAwareInterface { @@ -365,11 +364,12 @@ private function evaluateFlag( $hookExecutor->afterHooks($flagValueType, $hookContext, $resolutionDetails, $mergedRemainingHooks, $hookHints); } catch (Throwable $err) { $this->getLogger()->error( - sprintf( - "An error occurred during feature flag evaluation of flag '%s': %s", - $flagKey, - $err->getMessage(), - ), + "An error occurred during feature flag evaluation of flag '{flagKey}': {errorMessage}", + [ + 'flagKey' => $flagKey, + 'errorMessage' => $err->getMessage(), + 'exception' => $err, + ], ); $error = $err instanceof ThrowableWithResolutionError ? $err->getResolutionError() : new ResolutionError(ErrorCode::GENERAL(), $err->getMessage()); diff --git a/tests/unit/OpenFeatureClientTest.php b/tests/unit/OpenFeatureClientTest.php index 996b005..0ce38df 100644 --- a/tests/unit/OpenFeatureClientTest.php +++ b/tests/unit/OpenFeatureClientTest.php @@ -27,6 +27,7 @@ use OpenFeature\interfaces\provider\Provider; use Psr\Log\LoggerInterface; use ReflectionClass; +use Throwable; class OpenFeatureClientTest extends TestCase { @@ -556,7 +557,21 @@ public function testClientShouldLogInformativeErrorDuringAbnormalExecution(): vo /** @var LoggerInterface|MockInterface $mockLogger */ $mockLogger = $this->mockery(LoggerInterface::class); - $mockLogger->shouldReceive('error')->once(); + $mockLogger->shouldReceive('error')->with( + "An error occurred during feature flag evaluation of flag '{flagKey}': {errorMessage}", + Mockery::on(function ($context) { + $this->assertIsArray($context); + $this->assertArrayHasKey('flagKey', $context); + $this->assertSame('flagKey', $context['flagKey']); + $this->assertArrayHasKey('errorMessage', $context); + $this->assertSame('NETWORK_ERROR', $context['errorMessage']); + $this->assertArrayHasKey('exception', $context); + $this->assertInstanceOf(Throwable::class, $context['exception']); + $this->assertSame('NETWORK_ERROR', $context['exception']->getMessage()); + + return true; + }), + )->once(); $api->setLogger($mockLogger); $mockProvider = $this->getDefaultMockProvider();