Skouter mortgage estimates. Web application with view written in PHP and Vue, but controller and models in Go.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

131 linhas
3.1 KiB

  1. <?php
  2. namespace Grav\Plugin\Console;
  3. use Grav\Console\ConsoleCommand;
  4. use Symfony\Component\Console\Input\InputArgument;
  5. use Symfony\Component\Console\Input\InputOption;
  6. /**
  7. * Class LogCommand
  8. *
  9. * @package Grav\Plugin\Console
  10. */
  11. class LogCommand extends ConsoleCommand
  12. {
  13. /**
  14. * @var string
  15. */
  16. protected $logfile;
  17. /**
  18. * @var array
  19. */
  20. protected $options = [];
  21. /**
  22. * @var array
  23. */
  24. protected $colors = [
  25. 'DEBUG' => 'green',
  26. 'INFO' => 'cyan',
  27. 'NOTICE' => 'yellow',
  28. 'WARNING' => 'yellow',
  29. 'ERROR' => 'red',
  30. 'CRITICAL' => 'red',
  31. 'ALERT' => 'red',
  32. 'EMERGENCY' => 'magenta'
  33. ];
  34. /**
  35. *
  36. */
  37. protected function configure()
  38. {
  39. $this->logfile = LOG_DIR . 'grav.log';
  40. $this
  41. ->setName("log")
  42. ->setDescription("Outputs the Error Log")
  43. ->addOption(
  44. 'trace',
  45. 't',
  46. InputOption::VALUE_NONE,
  47. 'Include the errors stack trace in the output'
  48. )
  49. ->addOption(
  50. 'limit',
  51. 'l',
  52. InputArgument::OPTIONAL,
  53. 'Outputs only the last X amount of errors. Use as --limit 10 / -l 10 [default 5]',
  54. 5
  55. )
  56. ->setHelp('The <info>log</info> outputs the Errors Log in Console')
  57. ;
  58. }
  59. /**
  60. * @return int|null|void
  61. */
  62. protected function serve()
  63. {
  64. $this->options = [
  65. 'trace' => $this->input->getOption('trace'),
  66. 'limit' => $this->input->getOption('limit')
  67. ];
  68. if (!file_exists($this->logfile)) {
  69. $this->output->writeln("\n" . "Log file not found." . "\n");
  70. exit;
  71. }
  72. $log = file_get_contents($this->logfile);
  73. $lines = explode("\n", $log);
  74. if (!is_numeric($this->options['limit'])) {
  75. $this->options['limit'] = 5;
  76. }
  77. $lines = array_slice($lines, -($this->options['limit'] + 1));
  78. foreach ($lines as $line) {
  79. $this->output->writeln($this->parseLine($line));
  80. }
  81. }
  82. /**
  83. * @param string $line
  84. *
  85. * @return null|string
  86. */
  87. protected function parseLine($line)
  88. {
  89. $bit = explode(': ', $line);
  90. $line1 = explode('] ', $bit[0]);
  91. if (!$line1[0]) {
  92. return null;
  93. }
  94. $line2 = explode(' - ', $bit[1]);
  95. $date = $line1[0] . ']';
  96. $type = str_replace('grav.', '', $line1[1]);
  97. $color = $this->colors[$type];
  98. $error = $line2[0];
  99. $trace = implode(': ', array_slice($bit, 2));
  100. $output = [];
  101. $output[] = '';
  102. $output[] = '<cyan>' . $date . '</cyan>';
  103. $output[] = sprintf(' <%s>%s</%s> <white>' . $error . '</white>', $color, $type, $color);
  104. if ($this->options['trace']) {
  105. $output[] = ' <white>TRACE:</white> ';
  106. $output[] = ' ' . $trace;
  107. }
  108. $output[] = '<cyan>' . str_repeat('-', strlen($date)) . '</cyan>';
  109. return implode("\n", $output);
  110. }
  111. }