diff --git a/src/Logs/Log.php b/src/Logs/Log.php index 7c5b5b23b..318f70974 100644 --- a/src/Logs/Log.php +++ b/src/Logs/Log.php @@ -82,6 +82,11 @@ public function setLevel(LogLevel $level): self return $this; } + public function getPsrLevel(): string + { + return $this->level->toPsrLevel(); + } + public function getBody(): string { return $this->body; diff --git a/src/Logs/LogLevel.php b/src/Logs/LogLevel.php index 4e096daa3..2ed049f71 100644 --- a/src/Logs/LogLevel.php +++ b/src/Logs/LogLevel.php @@ -70,6 +70,24 @@ public function getPriority(): int return $this->priority; } + public function toPsrLevel(): string + { + switch ($this->value) { + case 'trace': + case 'debug': + return \Psr\Log\LogLevel::DEBUG; + case 'warn': + return \Psr\Log\LogLevel::WARNING; + case 'error': + return \Psr\Log\LogLevel::ERROR; + case 'fatal': + return \Psr\Log\LogLevel::CRITICAL; + case 'info': + default: + return \Psr\Log\LogLevel::INFO; + } + } + private static function getInstance(string $value, int $priority): self { if (!isset(self::$instances[$value])) { diff --git a/src/Logs/LogsAggregator.php b/src/Logs/LogsAggregator.php index 70b371504..d17b04939 100644 --- a/src/Logs/LogsAggregator.php +++ b/src/Logs/LogsAggregator.php @@ -147,9 +147,8 @@ public function add( return; } - // We check if it's a `LogsLogger` to avoid a infinite loop where the logger is logging the logs it's writing if ($sdkLogger !== null) { - $sdkLogger->log((string) $log->getLevel(), "Logs item: {$log->getBody()}", $log->attributes()->toSimpleArray()); + $sdkLogger->log($log->getPsrLevel(), "Logs item: {$log->getBody()}", $log->attributes()->toSimpleArray()); } $this->logs[] = $log; diff --git a/tests/Logs/LogTest.php b/tests/Logs/LogTest.php index 1cfba9c83..33d013dab 100644 --- a/tests/Logs/LogTest.php +++ b/tests/Logs/LogTest.php @@ -32,4 +32,31 @@ public function testGettersAndSetters(): void $log->setBody('bar'); $this->assertSame('bar', $log->getBody()); } + + /** + * @dataProvider logLevelDataProvider + */ + public function testLogLevelToPsrMapping(LogLevel $logLevel, $expected): void + { + $this->assertSame($expected, $logLevel->toPsrLevel()); + } + + /** + * @dataProvider logLevelDataProvider + */ + public function testLogAndLogLevelConsistent(LogLevel $level, $expected): void + { + $log = new Log(1.0, '123', $level, 'foo'); + $this->assertSame($expected, $log->getPsrLevel()); + } + + public function logLevelDataProvider(): \Generator + { + yield 'Debug -> Debug' => [LogLevel::debug(), \Psr\Log\LogLevel::DEBUG]; + yield 'Trace -> Debug' => [LogLevel::trace(), \Psr\Log\LogLevel::DEBUG]; + yield 'Info -> Info' => [LogLevel::info(), \Psr\Log\LogLevel::INFO]; + yield 'Warn -> Warning' => [LogLevel::warn(), \Psr\Log\LogLevel::WARNING]; + yield 'Error -> Error' => [LogLevel::error(), \Psr\Log\LogLevel::ERROR]; + yield 'Fatal -> Critical' => [LogLevel::fatal(), \Psr\Log\LogLevel::CRITICAL]; + } }