PluginProbe
Depicter — Popup & Slider Builder / 1.3.3
Depicter — Popup & Slider Builder v1.3.3
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / vendor / symfony / console / Logger / ConsoleLogger.php

ConsoleLogger.php in Depicter — Popup & Slider Builder 1.3.3, at vendor/symfony/console/Logger/ConsoleLogger.php

127 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\Console\Logger;
13
14 use Psr\Log\AbstractLogger;
15 use Psr\Log\InvalidArgumentException;
16 use Psr\Log\LogLevel;
17 use Symfony\Component\Console\Output\ConsoleOutputInterface;
18 use Symfony\Component\Console\Output\OutputInterface;
19
20 /**
21 * PSR-3 compliant console logger.
22 *
23 * @author Kévin Dunglas <dunglas@gmail.com>
24 *
25 * @see https://www.php-fig.org/psr/psr-3/
26 */
27 class ConsoleLogger extends AbstractLogger
28 {
29 public const INFO = 'info';
30 public const ERROR = 'error';
31
32 private $output;
33 private $verbosityLevelMap = [
34 LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL,
35 LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL,
36 LogLevel::CRITICAL => OutputInterface::VERBOSITY_NORMAL,
37 LogLevel::ERROR => OutputInterface::VERBOSITY_NORMAL,
38 LogLevel::WARNING => OutputInterface::VERBOSITY_NORMAL,
39 LogLevel::NOTICE => OutputInterface::VERBOSITY_VERBOSE,
40 LogLevel::INFO => OutputInterface::VERBOSITY_VERY_VERBOSE,
41 LogLevel::DEBUG => OutputInterface::VERBOSITY_DEBUG,
42 ];
43 private $formatLevelMap = [
44 LogLevel::EMERGENCY => self::ERROR,
45 LogLevel::ALERT => self::ERROR,
46 LogLevel::CRITICAL => self::ERROR,
47 LogLevel::ERROR => self::ERROR,
48 LogLevel::WARNING => self::INFO,
49 LogLevel::NOTICE => self::INFO,
50 LogLevel::INFO => self::INFO,
51 LogLevel::DEBUG => self::INFO,
52 ];
53 private $errored = false;
54
55 public function __construct(OutputInterface $output, array $verbosityLevelMap = [], array $formatLevelMap = [])
56 {
57 $this->output = $output;
58 $this->verbosityLevelMap = $verbosityLevelMap + $this->verbosityLevelMap;
59 $this->formatLevelMap = $formatLevelMap + $this->formatLevelMap;
60 }
61
62 /**
63 * {@inheritdoc}
64 *
65 * @return void
66 */
67 public function log($level, $message, array $context = [])
68 {
69 if (!isset($this->verbosityLevelMap[$level])) {
70 throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $level));
71 }
72
73 $output = $this->output;
74
75 // Write to the error output if necessary and available
76 if (self::ERROR === $this->formatLevelMap[$level]) {
77 if ($this->output instanceof ConsoleOutputInterface) {
78 $output = $output->getErrorOutput();
79 }
80 $this->errored = true;
81 }
82
83 // the if condition check isn't necessary -- it's the same one that $output will do internally anyway.
84 // We only do it for efficiency here as the message formatting is relatively expensive.
85 if ($output->getVerbosity() >= $this->verbosityLevelMap[$level]) {
86 $output->writeln(sprintf('<%1$s>[%2$s] %3$s</%1$s>', $this->formatLevelMap[$level], $level, $this->interpolate($message, $context)), $this->verbosityLevelMap[$level]);
87 }
88 }
89
90 /**
91 * Returns true when any messages have been logged at error levels.
92 *
93 * @return bool
94 */
95 public function hasErrored()
96 {
97 return $this->errored;
98 }
99
100 /**
101 * Interpolates context values into the message placeholders.
102 *
103 * @author PHP Framework Interoperability Group
104 */
105 private function interpolate(string $message, array $context): string
106 {
107 if (false === strpos($message, '{')) {
108 return $message;
109 }
110
111 $replacements = [];
112 foreach ($context as $key => $val) {
113 if (null === $val || is_scalar($val) || (\is_object($val) && method_exists($val, '__toString'))) {
114 $replacements["{{$key}}"] = $val;
115 } elseif ($val instanceof \DateTimeInterface) {
116 $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339);
117 } elseif (\is_object($val)) {
118 $replacements["{{$key}}"] = '[object '.\get_class($val).']';
119 } else {
120 $replacements["{{$key}}"] = '['.\gettype($val).']';
121 }
122 }
123
124 return strtr($message, $replacements);
125 }
126 }
127