pradosoft /
prado
| 1 | <?php |
||||
| 2 | |||||
| 3 | /** |
||||
| 4 | * TStdOutLogRoute class file |
||||
| 5 | * |
||||
| 6 | * @author Brad Anderson <[email protected]> |
||||
| 7 | * @link https://github.com/pradosoft/prado |
||||
| 8 | * @license https://github.com/pradosoft/prado/blob/master/LICENSE |
||||
| 9 | */ |
||||
| 10 | |||||
| 11 | namespace Prado\Util; |
||||
| 12 | |||||
| 13 | use Prado\Exceptions\TConfigurationException; |
||||
| 14 | use Prado\Exceptions\TLogException; |
||||
| 15 | use Prado\IO\TStdOutWriter; |
||||
| 16 | use Prado\Prado; |
||||
| 17 | use Prado\TPropertyValue; |
||||
| 18 | use Prado\Shell\Actions\TWebServerAction; |
||||
| 19 | use Prado\Shell\TShellWriter; |
||||
| 20 | |||||
| 21 | /** |
||||
| 22 | * TStdOutLogRoute class. |
||||
| 23 | * |
||||
| 24 | * This sends the log to STDOUT and will corrupt web server log files. This is useful |
||||
| 25 | * in presenting PRADO logs in the PHP (Test and Development) Web Server output. |
||||
| 26 | * |
||||
| 27 | * The TStdOutLogRoute can be turned off for all but the built-in Test web server |
||||
| 28 | * with the configuration property {@see \Prado\Util\TStdOutLogRoute::getOnlyDevServer} |
||||
| 29 | * set to true. |
||||
| 30 | * |
||||
| 31 | * @author Brad Anderson <[email protected]> |
||||
| 32 | * @since 4.3.0 |
||||
| 33 | */ |
||||
| 34 | class TStdOutLogRoute extends TLogRoute |
||||
| 35 | { |
||||
| 36 | /** @var bool Enable this log route only when running the built-in PHP web server, default false */ |
||||
| 37 | private bool $_onlyDevServer = false; |
||||
| 38 | |||||
| 39 | /** |
||||
| 40 | * This returns if the route is enabled. When OnlyDevServer is true, then this route |
||||
| 41 | * will only enable when running a page in the PHP Web Server. |
||||
| 42 | * @return bool Is the route enabled, default true. |
||||
| 43 | */ |
||||
| 44 | public function getEnabled(): bool |
||||
| 45 | { |
||||
| 46 | $enabled = parent::getEnabled(); |
||||
| 47 | |||||
| 48 | if ($this->getOnlyDevServer()) { |
||||
| 49 | $enabled &= (int) getenv(TWebServerAction::DEV_WEBSERVER_ENV); |
||||
| 50 | } |
||||
| 51 | |||||
| 52 | return $enabled; |
||||
|
0 ignored issues
–
show
Bug
Best Practice
introduced
by
Loading history...
|
|||||
| 53 | } |
||||
| 54 | |||||
| 55 | /** |
||||
| 56 | * @param array $logs list of log messages |
||||
| 57 | * @param bool $final is the final flush |
||||
| 58 | * @param array $meta the meta data for the logs. |
||||
| 59 | * @throws TLogException When failing to write to syslog. |
||||
| 60 | */ |
||||
| 61 | protected function processLogs(array $logs, bool $final, array $meta) |
||||
| 62 | { |
||||
| 63 | $writer = new TShellWriter(new TStdOutWriter()); |
||||
| 64 | |||||
| 65 | foreach ($logs as $log) { |
||||
| 66 | $writer->write('[' . static::getLevelName($log[TLogger::LOG_LEVEL]) . ']', $this->levelColor($log[TLogger::LOG_LEVEL])); |
||||
|
0 ignored issues
–
show
The method
Prado\Util\TLogRoute::getLevelName() is not static, but was called statically.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 67 | $writer->writeLine($this->formatLogMessage($log)); |
||||
| 68 | } |
||||
| 69 | $writer->flush(); |
||||
| 70 | } |
||||
| 71 | |||||
| 72 | /** |
||||
| 73 | * Translates a PRADO log level attribute into one understood by syslog |
||||
| 74 | * @param int $level prado log level |
||||
| 75 | * @return int syslog priority |
||||
| 76 | */ |
||||
| 77 | protected static function levelColor($level) |
||||
| 78 | { |
||||
| 79 | switch ($level) { |
||||
| 80 | case TLogger::PROFILE: |
||||
| 81 | case TLogger::PROFILE_BEGIN: |
||||
| 82 | case TLogger::PROFILE_END: |
||||
| 83 | return TShellWriter::BG_LIGHT_GREEN; |
||||
| 84 | case TLogger::DEBUG: |
||||
| 85 | return TShellWriter::BG_GREEN; |
||||
| 86 | case TLogger::INFO: |
||||
| 87 | return null; |
||||
| 88 | case TLogger::NOTICE: |
||||
| 89 | return TShellWriter::BG_BLUE; |
||||
| 90 | case TLogger::WARNING: |
||||
| 91 | return TShellWriter::BG_CYAN; |
||||
| 92 | case TLogger::ERROR: |
||||
| 93 | return TShellWriter::BG_LIGHT_MAGENTA; |
||||
| 94 | case TLogger::ALERT: |
||||
| 95 | return TShellWriter::BG_MAGENTA; |
||||
| 96 | case TLogger::FATAL: |
||||
| 97 | return TShellWriter::BG_RED; |
||||
| 98 | default: |
||||
| 99 | return TShellWriter::BG_GREEN; |
||||
| 100 | } |
||||
| 101 | } |
||||
| 102 | |||||
| 103 | /** |
||||
| 104 | * {@inheritdoc} |
||||
| 105 | */ |
||||
| 106 | public function formatLogMessage(array $log): string |
||||
| 107 | { |
||||
| 108 | if (!is_string($log[TLogger::LOG_MESSAGE])) { |
||||
| 109 | if ($log[TLogger::LOG_MESSAGE] instanceof \Exception || $log[TLogger::LOG_MESSAGE] instanceof \Throwable) { |
||||
| 110 | $log[TLogger::LOG_MESSAGE] = (string) $log[TLogger::LOG_MESSAGE]; |
||||
| 111 | } else { |
||||
| 112 | $log[TLogger::LOG_MESSAGE] = \Prado\Util\TVarDumper::dump($log[TLogger::LOG_MESSAGE]); |
||||
| 113 | } |
||||
| 114 | } |
||||
| 115 | |||||
| 116 | return '[' . $log[TLogger::LOG_CATEGORY] . '] ' . $log[TLogger::LOG_MESSAGE]; |
||||
| 117 | } |
||||
| 118 | |||||
| 119 | /** |
||||
| 120 | * @return bool If the Route is only enabled when operating in the PHP Test Web |
||||
| 121 | * Server, default false. |
||||
| 122 | */ |
||||
| 123 | public function getOnlyDevServer(): bool |
||||
| 124 | { |
||||
| 125 | return $this->_onlyDevServer; |
||||
| 126 | } |
||||
| 127 | |||||
| 128 | /** |
||||
| 129 | * |
||||
| 130 | * @param bool|string $value Only enable the route when running in the PHP Test Web Server. |
||||
| 131 | * @return static The current object. |
||||
| 132 | */ |
||||
| 133 | public function setOnlyDevServer($value): static |
||||
| 134 | { |
||||
| 135 | $this->_onlyDevServer = TPropertyValue::ensureBoolean($value); |
||||
| 136 | |||||
| 137 | return $this; |
||||
| 138 | } |
||||
| 139 | } |
||||
| 140 |