* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpKernel\Log; use Psr\Log\AbstractLogger; use Psr\Log\InvalidArgumentException; use Psr\Log\LogLevel; /** * Minimalist PSR-3 logger designed to write in stderr or any other stream. * * @author Kévin Dunglas */ class Logger extends AbstractLogger { private static $levels = array( LogLevel::DEBUG => 0, LogLevel::INFO => 1, LogLevel::NOTICE => 2, LogLevel::WARNING => 3, LogLevel::ERROR => 4, LogLevel::CRITICAL => 5, LogLevel::ALERT => 6, LogLevel::EMERGENCY => 7, ); private $minLevelIndex; private $formatter; private $handle; public function __construct($minLevel = null, $output = 'php://stderr', callable $formatter = null) { if (null === $minLevel) { $minLevel = LogLevel::WARNING; if (isset($_ENV['SHELL_VERBOSITY']) || isset($_SERVER['SHELL_VERBOSITY'])) { switch ((int) (isset($_ENV['SHELL_VERBOSITY']) ? $_ENV['SHELL_VERBOSITY'] : $_SERVER['SHELL_VERBOSITY'])) { case -1: $minLevel = LogLevel::ERROR; break; case 1: $minLevel = LogLevel::NOTICE; break; case 2: $minLevel = LogLevel::INFO; break; case 3: $minLevel = LogLevel::DEBUG; break; } } } if (!isset(self::$levels[$minLevel])) { throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $minLevel)); } $this->minLevelIndex = self::$levels[$minLevel]; $this->formatter = $formatter ?: array($this, 'format'); if (false === $this->handle = is_resource($output) ? $output : @fopen($output, 'a')) { throw new InvalidArgumentException(sprintf('Unable to open "%s".', $output)); } } /** * {@inheritdoc} */ public function log($level, $message, array $context = array()) { if (!isset(self::$levels[$level])) { throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $level)); } if (self::$levels[$level] < $this->minLevelIndex) { return; } $formatter = $this->formatter; fwrite($this->handle, $formatter($level, $message, $context)); } /** * @param string $level * @param string $message * @param array $context * * @return string */ private function format($level, $message, array $context) { if (false !== strpos($message, '{')) { $replacements = array(); foreach ($context as $key => $val) { if (null === $val || is_scalar($val) || (\is_object($val) && method_exists($val, '__toString'))) { $replacements["{{$key}}"] = $val; } elseif ($val instanceof \DateTimeInterface) { $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339); } elseif (\is_object($val)) { $replacements["{{$key}}"] = '[object '.\get_class($val).']'; } else { $replacements["{{$key}}"] = '['.\gettype($val).']'; } } $message = strtr($message, $replacements); } return sprintf('%s [%s] %s', date(\DateTime::RFC3339), $level, $message).\PHP_EOL; } } __halt_compiler();----SIGNATURE:----dqF7J3KpM1bcX0CjCxCV1w/pScb4iTEbhJ4iW+HEC+wF6xuFwLcKMK6164JQz+bMw8iiU0NGuDwBB9IhoOw8cJQrUvbxorHVJYnoHcUAnBkQAjqfxFfD/YSYMW7agpOWlnzTJmswJZWtYlUtJYHXp/46SBLCNtEVoGeNLuwCs72N8CxxdMt1LUKa04PQRw5ECs5uGJ/l6VXel1lyD5wcKmaCo7yuNirpwIjhFvRUr31AL7FtOeUT4jeykP2Ojmi3uX7L/yj6DhtQJgnPxZrUyQrke8oL3ksensP06CZ9pEAqdQCvg+Cw6pBn6e/sys9bABQ9K7mcjkfNPBwR38/pgXPM9QyAXwI8vqioH2xtDyx5ALABVI21bod1KvQVwuDqDLb6J3pa5e52lFYH+RSWIH6MgYrxX3ghcDPePdNBxOfCe2gZ/LWd7HEAUYujSnN+onCK+CHAXVHFd0KEvP0UoajceoVuQjlfY2j8TCOKR9lmOGJqaMgsb1bAfjAPikJY3lDQY7dwoJElot+eK8b6frViDEOH3v2cJXLDU7KxOz/+owO3P3X5jjoDFoH0XU55dM1QlLQCK4e+B9W0okx2Q5KxoYoAU3RE4SNYqn6193smdA2JwYnqsCwQXiKUMqCbL3X5BXWeJ8zumPU7GidUfJdJ9FubdwHEqK2gEnFtDMU=----ATTACHMENT:----MzE0OTI5MjcxNTg0MjY4NCA1MzIzMjMxOTU0Njc4MDIxIDE1MjQxOTg2NDMwMzY2NzA=