我正在使用Laravel 5.1创建基于控制台的应用程序。在开发过程中,我想在出现错误时显示异常跟踪。但是,即使我在php artisan
中使用-v -vv或-vvv选项,我也没有为我的自定义命令获取异常跟踪。我在.env
中设置了APP_DEBUG=true
,仍然没有任何例外迹象。如何在laravel控制台命令中显示异常跟踪?
的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:试验,得出下列处理功能:
/**
* 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
的输出是一样的。
日志文件会显示异常跟踪,所以不知何故应该可以在cli中显示它。我甚至没有看到错误发生的地方的文件名和字符串......我该如何处理这个问题?
在此先感谢!
编辑:
被挖得更深一点。如果我在命令中使用这样的:
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
,方法renderException
中找到。
我打算以后进一步挖掘,除非别人可以:-)
使用Laravel 5.3,它似乎工作。不知道-v,现在就做。谢谢。 –