Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Logger.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\HttpKernel\Log;
013
014 use Psr\Log\AbstractLogger;
015 use Psr\Log\InvalidArgumentException;
016 use Psr\Log\LogLevel;
017
018 /**
019 * Minimalist PSR-3 logger designed to write in stderr or any other stream.
020 *
021 * @author Kévin Dunglas <dunglas@gmail.com>
022 */
023 class Logger extends AbstractLogger
024 {
025 private static $levels = [
026 LogLevel::DEBUG => 0,
027 LogLevel::INFO => 1,
028 LogLevel::NOTICE => 2,
029 LogLevel::WARNING => 3,
030 LogLevel::ERROR => 4,
031 LogLevel::CRITICAL => 5,
032 LogLevel::ALERT => 6,
033 LogLevel::EMERGENCY => 7,
034 ];
035
036 private $minLevelIndex;
037 private $formatter;
038 private $handle;
039
040 public function __construct($minLevel = null, $output = null, callable $formatter = null)
041 {
042 if (null === $minLevel) {
043 $minLevel = null === $output || 'php://stdout' === $output || 'php://stderr' === $output ? LogLevel::ERROR : LogLevel::WARNING;
044
045 if (isset($_ENV['SHELL_VERBOSITY']) || isset($_SERVER['SHELL_VERBOSITY'])) {
046 switch ((int) (isset($_ENV['SHELL_VERBOSITY']) ? $_ENV['SHELL_VERBOSITY'] : $_SERVER['SHELL_VERBOSITY'])) {
047 case -1: $minLevel = LogLevel::ERROR; break;
048 case 1: $minLevel = LogLevel::NOTICE; break;
049 case 2: $minLevel = LogLevel::INFO; break;
050 case 3: $minLevel = LogLevel::DEBUG; break;
051 }
052 }
053 }
054
055 if (!isset(self::$levels[$minLevel])) {
056 throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $minLevel));
057 }
058
059 $this->minLevelIndex = self::$levels[$minLevel];
060 $this->formatter = $formatter ?: [$this, 'format'];
061 if ($output && false === $this->handle = \is_resource($output) ? $output : @fopen($output, 'a')) {
062 throw new InvalidArgumentException(sprintf('Unable to open "%s".', $output));
063 }
064 }
065
066 /**
067 * {@inheritdoc}
068 */
069 public function log($level, $message, array $context = [])
070 {
071 if (!isset(self::$levels[$level])) {
072 throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $level));
073 }
074
075 if (self::$levels[$level] < $this->minLevelIndex) {
076 return;
077 }
078
079 $formatter = $this->formatter;
080 if ($this->handle) {
081 @fwrite($this->handle, $formatter($level, $message, $context));
082 } else {
083 error_log($formatter($level, $message, $context, false));
084 }
085 }
086
087 /**
088 * @param string $level
089 * @param string $message
090 *
091 * @return string
092 */
093 private function format($level, $message, array $context, $prefixDate = true)
094 {
095 if (false !== strpos($message, '{')) {
096 $replacements = [];
097 foreach ($context as $key => $val) {
098 if (null === $val || is_scalar($val) || (\is_object($val) && method_exists($val, '__toString'))) {
099 $replacements["{{$key}}"] = $val;
100 } elseif ($val instanceof \DateTimeInterface) {
101 $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339);
102 } elseif (\is_object($val)) {
103 $replacements["{{$key}}"] = '[object '.\get_class($val).']';
104 } else {
105 $replacements["{{$key}}"] = '['.\gettype($val).']';
106 }
107 }
108
109 $message = strtr($message, $replacements);
110 }
111
112 $log = sprintf('[%s] %s', $level, $message).\PHP_EOL;
113 if ($prefixDate) {
114 $log = date(\DateTime::RFC3339).' '.$log;
115 }
116
117 return $log;
118 }
119 }
120