make severity an enum only

This commit is contained in:
Brett McBride 2024-04-28 21:25:29 +10:00
parent ee1b3601ce
commit 710822907b
8 changed files with 28 additions and 20 deletions

View File

@ -3,6 +3,7 @@
declare(strict_types=1);
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Logs\Exporter\ConsoleExporterFactory;
use OpenTelemetry\SDK\Logs\LoggerProvider;
@ -24,7 +25,7 @@ $logger = $loggerProvider->getLogger('demo', '1.0', 'http://schema.url', ['foo'
$record = (new LogRecord(['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world']))
->setSeverityText('INFO')
->setSeverityNumber(9);
->setSeverityNumber(Severity::INFO);
/**
* Note that Loggers should only be used directly by a log appender.

View File

@ -16,7 +16,7 @@ interface EventLoggerInterface
mixed $payload = null,
?int $timestamp = null,
?ContextInterface $context = null,
Severity|int|null $severityNumber = null,
?Severity $severityNumber = null,
?array $attributes = [],
): void;
}

View File

@ -42,9 +42,9 @@ class LogRecord
/**
* @see https://opentelemetry.io/docs/reference/specification/logs/data-model/#field-severitynumber
*/
public function setSeverityNumber(Severity|int $severityNumber): self
public function setSeverityNumber(Severity $severityNumber): self
{
$this->severityNumber = ($severityNumber instanceof Severity) ? $severityNumber->value : $severityNumber;
$this->severityNumber = $severityNumber->value;
return $this;
}

View File

@ -4,28 +4,30 @@ declare(strict_types=1);
namespace OpenTelemetry\API\Logs\Map;
use InvalidArgumentException;
use OpenTelemetry\API\Logs\Severity;
use Psr\Log\LogLevel;
class Psr3
{
/**
* Maps PSR-3 severity level (string) to the appropriate opentelemetry severity number
* Maps PSR-3 severity level (string) to the appropriate opentelemetry severity
*
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model-appendix.md#appendix-b-severitynumber-example-mappings
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber
*/
public static function severityNumber(string $level): int
public static function severityNumber(string $level): Severity
{
return match (strtolower($level)) {
LogLevel::DEBUG => 5,
LogLevel::INFO => 9,
LogLevel::NOTICE => 10,
LogLevel::WARNING => 13,
LogLevel::ERROR => 17,
LogLevel::CRITICAL => 18,
LogLevel::ALERT => 19,
LogLevel::EMERGENCY => 21,
default => 0,
LogLevel::DEBUG => Severity::DEBUG,
LogLevel::INFO => Severity::INFO,
LogLevel::NOTICE => Severity::INFO2,
LogLevel::WARNING => Severity::WARN,
LogLevel::ERROR => Severity::ERROR,
LogLevel::CRITICAL => Severity::ERROR2,
LogLevel::ALERT => Severity::ERROR3,
LogLevel::EMERGENCY => Severity::FATAL,
default => throw new InvalidArgumentException('Unknown severity: ' . $level),
};
}
}

View File

@ -26,7 +26,7 @@ class EventLogger implements EventLoggerInterface
mixed $payload = null,
?int $timestamp = null,
?ContextInterface $context = null,
Severity|int|null $severityNumber = null,
?Severity $severityNumber = null,
?array $attributes = [],
): void {
$logRecord = new LogRecord();
@ -35,7 +35,7 @@ class EventLogger implements EventLoggerInterface
$payload && $logRecord->setBody($payload);
$logRecord->setTimestamp($timestamp ?? (int) (microtime(true)*LogRecord::NANOS_PER_SECOND));
$context && $logRecord->setContext($context);
$logRecord->setSeverityNumber($severityNumber ?? Severity::INFO);
$severityNumber && $logRecord->setSeverityNumber($severityNumber);
$this->logger->emit($logRecord);
}

View File

@ -33,7 +33,6 @@ class LogRecordTest extends TestCase
return [
['setBody', 'body', 'foo'],
['setAttributes', 'attributes', ['foo' => 'bar']],
['setSeverityNumber', 'severityNumber', 5],
['setSeverityNumber', 'severityNumber', Severity::ERROR, Severity::ERROR->value],
['setSeverityText', 'severityText', 'info'],
['setObservedTimestamp', 'observedTimestamp', 999],

View File

@ -32,7 +32,12 @@ class Psr3Test extends TestCase
[LogLevel::NOTICE],
[LogLevel::INFO],
[LogLevel::DEBUG],
['unknown'],
];
}
public function test_unknown_value_error(): void
{
$this->expectException(\InvalidArgumentException::class);
Psr3::severityNumber('unknown');
}
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Logs;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\Context\ContextInterface;
use OpenTelemetry\SDK\Common\Attribute\AttributesFactory;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeInterface;
@ -39,7 +40,7 @@ class ReadableLogRecordTest extends TestCase
public function test_getters(): void
{
$logRecord = (new LogRecord('body'))
->setSeverityNumber(5)
->setSeverityNumber(Severity::DEBUG)
->setSeverityText('info')
->setTimestamp(11)
->setObservedTimestamp(22)