'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 $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%s> ' . $error . '', $color, $type, $color);
if ($this->options['trace']) {
$output[] = ' TRACE: ';
$output[] = ' ' . $trace;
}
$output[] = '' . str_repeat('-', strlen($date)) . '';
return implode("\n", $output);
}
}