Я пытаюсь получить уровень многословия ВНУТРИ класса обработчика исключений, чтобы я мог печатать больше или меньше информации.
Я пишу пакетный сценарий, который выполняется на сотнях тысяч циклов и поэтому мойцель состоит в том, чтобы ограничить многословность трассировки стека, поскольку в этом случае единственными полезными трассировками являются последние 3 или 4.
Я пробовал некоторые другие ответы, приведенные здесь в SO, и читал по всему Интернету,но никто из них не говорит о работе внутри обработчика исключений.Тот, который выглядит ближе: этот ответ , в котором говорится $this->getOutput()->getVerbosity();
, но он не работает внутри обработчика ошибок.
Это мой код:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Mail;
use Symfony\Component\Debug\Exception\FlattenException;
use Symfony\Component\Debug\ExceptionHandler as SymfonyExceptionHandler;
use App\Mail\ExceptionOccured;
use Illuminate\Support\Facades\Log;
use Symfony\Component\Console\Output\OutputInterface;
class Handler extends ExceptionHandler
...
...
public function render($request, Exception $e)
{
// return parent::render($request, $e);
Log::error($this->buildMessage($e));
}
public function buildMessage($e)
{
$verbosity_level = $this->getOutput()->getVerbosity();
$is_verbose = ($verbosity_level >= OutputInterface::VERBOSITY_DEBUG);
$t0 = $e->getTrace()[0];
$tm = "Error: [{$e->getCode()}] {$e->getMessage()} @ {$t0['file']}:{$t0['line']}".PHP_EOL;
// if ($is_verbose){
...(more code) ...
// }
return $tm;
}
}
И это вывод:
PHP Fatal error:
Uncaught Error: Call to undefined method App\Exceptions\Handler::getOutput() in ...\Handler.php:89
Я видел, что свойство output
существует, но оно защищено и не имеет получателя.Возможно, цитируемый ответ действителен для более ранних версий.Я действительно заблудился, так как у меня всего 2 месяца игры с Laravel.