summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/api/Behavior
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/open-telemetry/api/Behavior')
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/ErrorLogWriter.php13
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/Formatter.php37
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/LogWriterInterface.php10
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/NoopLogWriter.php13
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/Psr3LogWriter.php22
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriter/StreamLogWriter.php25
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/LogWriterFactory.php48
-rw-r--r--vendor/open-telemetry/api/Behavior/Internal/Logging.php90
-rw-r--r--vendor/open-telemetry/api/Behavior/LogsMessagesTrait.php50
9 files changed, 308 insertions, 0 deletions
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/ErrorLogWriter.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/ErrorLogWriter.php
new file mode 100644
index 000000000..1b9f785aa
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/ErrorLogWriter.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+class ErrorLogWriter implements LogWriterInterface
+{
+ public function write($level, string $message, array $context): void
+ {
+ error_log(Formatter::format($level, $message, $context));
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Formatter.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Formatter.php
new file mode 100644
index 000000000..4cfd6f9d4
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Formatter.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+class Formatter
+{
+ public static function format($level, string $message, array $context): string
+ {
+ $exception = (array_key_exists('exception', $context) && $context['exception'] instanceof \Throwable)
+ ? $context['exception']
+ : null;
+ if ($exception) {
+ $message = sprintf(
+ 'OpenTelemetry: [%s] %s [exception] %s%s%s',
+ $level,
+ $message,
+ $exception->getMessage(),
+ PHP_EOL,
+ $exception->getTraceAsString()
+ );
+ } else {
+ //get calling location, skipping over trait, formatter etc
+ $caller = debug_backtrace()[3];
+ $message = sprintf(
+ 'OpenTelemetry: [%s] %s in %s(%s)',
+ $level,
+ $message,
+ $caller['file'],
+ $caller['line'],
+ );
+ }
+
+ return $message;
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/LogWriterInterface.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/LogWriterInterface.php
new file mode 100644
index 000000000..046d21fc9
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/LogWriterInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+interface LogWriterInterface
+{
+ public function write($level, string $message, array $context): void;
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/NoopLogWriter.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/NoopLogWriter.php
new file mode 100644
index 000000000..f7529c082
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/NoopLogWriter.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+class NoopLogWriter implements LogWriterInterface
+{
+ public function write($level, string $message, array $context): void
+ {
+ //do nothing
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Psr3LogWriter.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Psr3LogWriter.php
new file mode 100644
index 000000000..5b2d19c15
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/Psr3LogWriter.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+use Psr\Log\LoggerInterface;
+
+class Psr3LogWriter implements LogWriterInterface
+{
+ private LoggerInterface $logger;
+
+ public function __construct(LoggerInterface $logger)
+ {
+ $this->logger = $logger;
+ }
+
+ public function write($level, string $message, array $context): void
+ {
+ $this->logger->log($level, $message, $context);
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriter/StreamLogWriter.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/StreamLogWriter.php
new file mode 100644
index 000000000..f65f1e856
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriter/StreamLogWriter.php
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal\LogWriter;
+
+class StreamLogWriter implements LogWriterInterface
+{
+ private $stream;
+
+ public function __construct(string $destination)
+ {
+ $stream = fopen($destination, 'a');
+ if ($stream) {
+ $this->stream = $stream;
+ } else {
+ throw new \RuntimeException(sprintf('Unable to open %s for writing', $destination));
+ }
+ }
+
+ public function write($level, string $message, array $context): void
+ {
+ fwrite($this->stream, Formatter::format($level, $message, $context));
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/LogWriterFactory.php b/vendor/open-telemetry/api/Behavior/Internal/LogWriterFactory.php
new file mode 100644
index 000000000..07c48cea5
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/LogWriterFactory.php
@@ -0,0 +1,48 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior\Internal;
+
+use OpenTelemetry\API\Behavior\Internal\LogWriter\ErrorLogWriter;
+use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
+use OpenTelemetry\API\Behavior\Internal\LogWriter\NoopLogWriter;
+use OpenTelemetry\API\Behavior\Internal\LogWriter\Psr3LogWriter;
+use OpenTelemetry\API\Behavior\Internal\LogWriter\StreamLogWriter;
+use OpenTelemetry\API\Instrumentation\ConfigurationResolver;
+use OpenTelemetry\API\LoggerHolder;
+
+class LogWriterFactory
+{
+ private const OTEL_PHP_LOG_DESTINATION = 'OTEL_PHP_LOG_DESTINATION';
+
+ public function create(): LogWriterInterface
+ {
+ $dest = (new ConfigurationResolver())->getString(self::OTEL_PHP_LOG_DESTINATION);
+ $logger = LoggerHolder::get();
+
+ switch ($dest) {
+ case 'none':
+ return new NoopLogWriter();
+ case 'stderr':
+ return new StreamLogWriter('php://stderr');
+ case 'stdout':
+ return new StreamLogWriter('php://stdout');
+ case 'psr3':
+ if ($logger) {
+ return new Psr3LogWriter($logger);
+ }
+ error_log('OpenTelemetry: cannot use OTEL_PHP_LOG_DESTINATION=psr3 without providing a PSR-3 logger');
+ //default to error log
+ return new ErrorLogWriter();
+ case 'error_log':
+ return new ErrorLogWriter();
+ default:
+ if ($logger) {
+ return new Psr3LogWriter($logger);
+ }
+
+ return new ErrorLogWriter();
+ }
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/Internal/Logging.php b/vendor/open-telemetry/api/Behavior/Internal/Logging.php
new file mode 100644
index 000000000..e5bec7ab5
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/Internal/Logging.php
@@ -0,0 +1,90 @@
+<?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;
+ }
+}
diff --git a/vendor/open-telemetry/api/Behavior/LogsMessagesTrait.php b/vendor/open-telemetry/api/Behavior/LogsMessagesTrait.php
new file mode 100644
index 000000000..d0207e4b1
--- /dev/null
+++ b/vendor/open-telemetry/api/Behavior/LogsMessagesTrait.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Behavior;
+
+use OpenTelemetry\API\Behavior\Internal\Logging;
+use Psr\Log\LogLevel;
+
+trait LogsMessagesTrait
+{
+ private static function shouldLog(string $level): bool
+ {
+ return Logging::level($level) >= Logging::logLevel();
+ }
+
+ private static function doLog(string $level, string $message, array $context): void
+ {
+ $writer = Logging::logWriter();
+ if (self::shouldLog($level)) {
+ $context['source'] = get_called_class();
+ $writer->write($level, $message, $context);
+ }
+ }
+
+ protected static function logDebug(string $message, array $context = []): void
+ {
+ self::doLog(LogLevel::DEBUG, $message, $context);
+ }
+
+ protected static function logInfo(string $message, array $context = []): void
+ {
+ self::doLog(LogLevel::INFO, $message, $context);
+ }
+
+ protected static function logNotice(string $message, array $context = []): void
+ {
+ self::doLog(LogLevel::NOTICE, $message, $context);
+ }
+
+ protected static function logWarning(string $message, array $context = []): void
+ {
+ self::doLog(LogLevel::WARNING, $message, $context);
+ }
+
+ protected static function logError(string $message, array $context = []): void
+ {
+ self::doLog(LogLevel::ERROR, $message, $context);
+ }
+}