ttrss/vendor/open-telemetry/api/Behavior/Internal/Logging.php

91 lines
2.3 KiB
PHP
Raw Normal View History

2023-10-20 14:12:29 +00:00
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Behavior\Internal;
use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
use Psr\Log\LogLevel;
/**
* Logging utility functions for internal logging (of OpenTelemetry errors/warnings etc).
* This is not part of SDK configuration to avoid creating a dependency on SDK from any package which does logging.
* @todo this should be `@internal`, but deptrac is not happy with that.
*/
class Logging
{
private const OTEL_LOG_LEVEL = 'OTEL_LOG_LEVEL';
private const DEFAULT_LEVEL = LogLevel::INFO;
private const NONE = 'none';
private const LEVELS = [
LogLevel::DEBUG,
LogLevel::INFO,
LogLevel::NOTICE,
LogLevel::WARNING,
LogLevel::ERROR,
LogLevel::CRITICAL,
LogLevel::ALERT,
LogLevel::EMERGENCY,
self::NONE, //highest priority so that nothing is logged
];
/**
* The minimum log level. Messages with lower severity than this will be ignored.
*/
private static ?int $logLevel = null;
private static ?LogWriterInterface $writer = null;
public static function setLogWriter(LogWriterInterface $writer): void
{
self::$writer = $writer;
}
public static function logWriter(): LogWriterInterface
{
self::$writer ??= (new LogWriterFactory())->create();
return self::$writer;
}
/**
* Get level priority from level name
*/
public static function level(string $level): int
{
$value = array_search($level, self::LEVELS);
return $value ?: 1; //'info'
}
/**
* Get defined OTEL_LOG_LEVEL, or default
*/
public static function logLevel(): int
{
self::$logLevel ??= self::getLogLevel();
return self::$logLevel;
}
private static function getLogLevel(): int
{
$level = array_key_exists(self::OTEL_LOG_LEVEL, $_SERVER)
? $_SERVER[self::OTEL_LOG_LEVEL]
: getenv(self::OTEL_LOG_LEVEL);
if (!$level) {
$level = ini_get(self::OTEL_LOG_LEVEL);
}
if (!$level) {
$level = self::DEFAULT_LEVEL;
}
return self::level($level);
}
public static function reset(): void
{
self::$logLevel = null;
self::$writer = null;
}
}