Psr\Log\LogLevel::DEBUG, Tracy\ILogger::INFO => Psr\Log\LogLevel::INFO, Tracy\ILogger::WARNING => Psr\Log\LogLevel::WARNING, Tracy\ILogger::ERROR => Psr\Log\LogLevel::ERROR, Tracy\ILogger::EXCEPTION => Psr\Log\LogLevel::ERROR, Tracy\ILogger::CRITICAL => Psr\Log\LogLevel::CRITICAL, ]; /** @var Psr\Log\LoggerInterface */ private $psrLogger; public function __construct(Psr\Log\LoggerInterface $psrLogger) { $this->psrLogger = $psrLogger; } public function log($value, $level = self::INFO) { if ($value instanceof \Throwable) { $message = Tracy\Helpers::getClass($value) . ': ' . $value->getMessage() . ($value->getCode() ? ' #' . $value->getCode() : '') . ' in ' . $value->getFile() . ':' . $value->getLine(); $context = ['exception' => $value]; } elseif (!is_string($value)) { $message = trim(Tracy\Dumper::toText($value)); $context = []; } else { $message = $value; $context = []; } $this->psrLogger->log( self::LevelMap[$level] ?? Psr\Log\LogLevel::ERROR, $message, $context ); } }