Я использую Laravel 5.1 для создания консольного приложения. Во время разработки я хотел бы отобразить трассировку исключения при возникновении ошибки. Однако, даже если я использую опцию -v -vv или -vvv в php artisan
, я не получаю трассировку исключения для моих пользовательских команд. Я установил APP_DEBUG=true
в мой .env
, все еще не отслеживая трассировку исключений.
Вывод php artisan some:unknowncommand
:
[InvalidArgumentException]
There are no commands defined in the "some" namespace.
Вывод php artisan -v some:unknowncommand
:
[InvalidArgumentException]
There are no commands defined in the "some" namespace.
Exception trace:
() at /Users/dirkpostma/Dropbox/Domains/dpepp/vendor/symfony/console/Application.php:501
Symfony\Component\Console\Application->findNamespace() at /Users/dirkpostma/Dropbox/Domains/dpepp/vendor/symfony/console/Application.php:535
Symfony\Component\Console\Application->find() at /Users/dirkpostma/Dropbox/Domains/dpepp/vendor/symfony/console/Application.php:192
Symfony\Component\Console\Application->doRun() at /Users/dirkpostma/Dropbox/Domains/dpepp/vendor/symfony/console/Application.php:126
...
Теперь я создал очень простую консольную команду под названием dp: test со следующей функцией дескриптора:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
generate error here
}
Вывод php artisan dp:test
:
[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected 'error' (T_STRING)
Вывод php artisan -v dp:test
одинаков.
Вывод php artisan -vvv dp:test
одинаков.
В файле журнала DOES показана трассировка исключения, поэтому каким-то образом ее можно отобразить в cli. Я даже не вижу имя файла и linenumer, где возникает ошибка... Как я могу позаботиться об этом?
Спасибо заранее!
EDIT:
Копается немного дальше. Если я использую это в своей команде:
public function handle()
{
throw new \Exception("test exception");
}
и я выдаю команду php artisan -v dp:test
, печатается ошибка. Трассировка только не печатается, когда исключение выбрасывается из-за ошибки PHP. В методе Illuminate/Foundation/Bootstrap/HandleExceptions.php
bootstrap
Ошибки PHP преобразуются в Исключения. Когда это происходит, генерируется исключение, но при печати значение -v каким-то образом игнорируется. Это очень неудобно, потому что он сильно затрудняет отладку приложений CLI.
Я думаю, что решение можно найти в vendor/symfony/console/Application.php
, method renderException
.
Я собираюсь копать дальше позже, если кто-то другой не сможет указать решение быстрее меня: -)