nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							124 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							124 lines
						
					
					
						
							4.2 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of the Symfony package. | |
|  * | |
|  * (c) Fabien Potencier <fabien@symfony.com> | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Symfony\Component\Console\Logger; | |
| 
 | |
| use Psr\Log\AbstractLogger; | |
| use Psr\Log\InvalidArgumentException; | |
| use Psr\Log\LogLevel; | |
| use Symfony\Component\Console\Output\ConsoleOutputInterface; | |
| use Symfony\Component\Console\Output\OutputInterface; | |
| 
 | |
| /** | |
|  * PSR-3 compliant console logger. | |
|  * | |
|  * @author Kévin Dunglas <dunglas@gmail.com> | |
|  * | |
|  * @see http://www.php-fig.org/psr/psr-3/ | |
|  */ | |
| class ConsoleLogger extends AbstractLogger | |
| { | |
|     const INFO = 'info'; | |
|     const ERROR = 'error'; | |
| 
 | |
|     private $output; | |
|     private $verbosityLevelMap = array( | |
|         LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL, | |
|         LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL, | |
|         LogLevel::CRITICAL => OutputInterface::VERBOSITY_NORMAL, | |
|         LogLevel::ERROR => OutputInterface::VERBOSITY_NORMAL, | |
|         LogLevel::WARNING => OutputInterface::VERBOSITY_NORMAL, | |
|         LogLevel::NOTICE => OutputInterface::VERBOSITY_VERBOSE, | |
|         LogLevel::INFO => OutputInterface::VERBOSITY_VERY_VERBOSE, | |
|         LogLevel::DEBUG => OutputInterface::VERBOSITY_DEBUG, | |
|     ); | |
|     private $formatLevelMap = array( | |
|         LogLevel::EMERGENCY => self::ERROR, | |
|         LogLevel::ALERT => self::ERROR, | |
|         LogLevel::CRITICAL => self::ERROR, | |
|         LogLevel::ERROR => self::ERROR, | |
|         LogLevel::WARNING => self::INFO, | |
|         LogLevel::NOTICE => self::INFO, | |
|         LogLevel::INFO => self::INFO, | |
|         LogLevel::DEBUG => self::INFO, | |
|     ); | |
|     private $errored = false; | |
| 
 | |
|     public function __construct(OutputInterface $output, array $verbosityLevelMap = array(), array $formatLevelMap = array()) | |
|     { | |
|         $this->output = $output; | |
|         $this->verbosityLevelMap = $verbosityLevelMap + $this->verbosityLevelMap; | |
|         $this->formatLevelMap = $formatLevelMap + $this->formatLevelMap; | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function log($level, $message, array $context = array()) | |
|     { | |
|         if (!isset($this->verbosityLevelMap[$level])) { | |
|             throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $level)); | |
|         } | |
| 
 | |
|         $output = $this->output; | |
| 
 | |
|         // Write to the error output if necessary and available | |
|         if (self::ERROR === $this->formatLevelMap[$level]) { | |
|             if ($this->output instanceof ConsoleOutputInterface) { | |
|                 $output = $output->getErrorOutput(); | |
|             } | |
|             $this->errored = true; | |
|         } | |
| 
 | |
|         // the if condition check isn't necessary -- it's the same one that $output will do internally anyway. | |
|         // We only do it for efficiency here as the message formatting is relatively expensive. | |
|         if ($output->getVerbosity() >= $this->verbosityLevelMap[$level]) { | |
|             $output->writeln(sprintf('<%1$s>[%2$s] %3$s</%1$s>', $this->formatLevelMap[$level], $level, $this->interpolate($message, $context)), $this->verbosityLevelMap[$level]); | |
|         } | |
|     } | |
| 
 | |
|     /** | |
|      * Returns true when any messages have been logged at error levels. | |
|      * | |
|      * @return bool | |
|      */ | |
|     public function hasErrored() | |
|     { | |
|         return $this->errored; | |
|     } | |
| 
 | |
|     /** | |
|      * Interpolates context values into the message placeholders. | |
|      * | |
|      * @author PHP Framework Interoperability Group | |
|      */ | |
|     private function interpolate(string $message, array $context): string | |
|     { | |
|         if (false === strpos($message, '{')) { | |
|             return $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).']'; | |
|             } | |
|         } | |
| 
 | |
|         return strtr($message, $replacements); | |
|     } | |
| }
 | |
| 
 |