'green', 'INFO' => 'cyan', 'NOTICE' => 'yellow', 'WARNING' => 'yellow', 'ERROR' => 'red', 'CRITICAL' => 'red', 'ALERT' => 'red', 'EMERGENCY' => 'magenta' ]; /** * */ protected function configure() { $this->logfile = LOG_DIR . 'grav.log'; $this ->setName("log") ->setDescription("Outputs the Error Log") ->addOption( 'trace', 't', InputOption::VALUE_NONE, 'Include the errors stack trace in the output' ) ->addOption( 'limit', 'l', InputArgument::OPTIONAL, 'Outputs only the last X amount of errors. Use as --limit 10 / -l 10 [default 5]', 5 ) ->setHelp('The log outputs the Errors Log in Console') ; } /** * @return int|null|void */ protected function serve() { $this->options = [ 'trace' => $this->input->getOption('trace'), 'limit' => $this->input->getOption('limit') ]; if (!file_exists($this->logfile)) { $this->output->writeln("\n" . "Log file not found." . "\n"); exit; } $log = file_get_contents($this->logfile); $lines = explode("\n", $log); if (!is_numeric($this->options['limit'])) { $this->options['limit'] = 5; } $lines = array_slice($lines, -($this->options['limit'] + 1)); foreach ($lines as $line) { $this->output->writeln($this->parseLine($line)); } } /** * @param string $line * * @return null|string */ protected function parseLine($line) { $bit = explode(': ', $line); $line1 = explode('] ', $bit[0]); if (!$line1[0]) { return null; } $line2 = explode(' - ', $bit[1]); $date = $line1[0] . ']'; $type = str_replace('grav.', '', $line1[1]); $color = $this->colors[$type]; $error = $line2[0]; $trace = implode(': ', array_slice($bit, 2)); $output = []; $output[] = ''; $output[] = '' . $date . ''; $output[] = sprintf(' <%s>%s ' . $error . '', $color, $type, $color); if ($this->options['trace']) { $output[] = ' TRACE: '; $output[] = ' ' . $trace; } $output[] = '' . str_repeat('-', strlen($date)) . ''; return implode("\n", $output); } }