gpt4 book ai didi

php - 如何在 laravel 控制台命令中显示异常跟踪?

转载 作者:IT王子 更新时间:2023-10-28 23:45:52 27 4
gpt4 key购买 nike

我正在使用 Laravel 5.1 创建基于控制台的应用程序。在开发过程中,我想在发生错误时显示异常跟踪。但是,即使我在 php artisan 中使用 -v -vv 或 -vvv 选项,我也没有得到自定义命令的异常跟踪。我在我的 .env 中设置了 APP_DEBUG=true,仍然没有异常跟踪。

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 的输出是一样的。

日志文件确实显示了异常跟踪,因此应该可以在 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中找到。

我稍后会进一步挖掘,除非其他人可以比我更快地指出解决方案:-)

最佳答案

我找到了 -v 被忽略的原因:

Illuminate/Foundation/Bootstrap/HandleExceptions.php 中,renderForConsole 方法实例化一个 ConsoleOutput 对象,使用默认设置,不考虑考虑用户要求的详细设置:

protected function renderForConsole($e)
{
$this->getExceptionHandler()->renderForConsole(new ConsoleOutput, $e);
}

因此,无论设置 -v -vv 还是 -vvv,vendor/symfony/console/Application.php 中的 $output->getVerbosity()始终低于 OutputInterface::VERBOSITY_VERBOSE,因此不会打印堆栈跟踪。

我可能为此在 github 上发起了一个问题,因为我认为如果用户设置 -v 则在 CLI 中显示错误会更方便。

关于php - 如何在 laravel 控制台命令中显示异常跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com