Sto usando Laravel 5.1 per creare un'applicazione basata su console. Durante lo sviluppo vorrei visualizzare la traccia di eccezione quando si verifica un errore. Tuttavia, anche se utilizzo l'opzione -v -vv o -vvv in php artisan
, non viene visualizzata alcuna traccia di eccezione per i miei comandi personalizzati. Ho impostato APP_DEBUG=true
nel mio .env
, ancora nessuna traccia di eccezioni.Come posso visualizzare la traccia Exception nel comando della console di laravel?
uscita di php artisan some:unknowncommand
è:
[InvalidArgumentException]
There are no commands defined in the "some" namespace.
uscita di 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
...
Ora, ho creato un comando della console molto semplice chiamato dp: prova, con la seguente funzione manico:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
generate error here
}
L'output di php artisan dp:test
è:
[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected 'error' (T_STRING)
L'output di php artisan -v dp:test
è uguale. L'uscita di php artisan -vvv dp:test
è la stessa.
Il file di registro DOES mostra la traccia di eccezione, quindi in qualche modo dovrebbe essere possibile visualizzarlo in cli. Non vedo nemmeno il nome del file e il lino dove si verifica l'errore ... Come posso prendermi cura di questo?
Grazie in anticipo!
EDIT:
viene estratto un po 'più. Nel caso in cui io uso questo nel mio comando:
public function handle()
{
throw new \Exception("test exception");
}
e lanciare il comando php artisan -v dp:test
, la Traccia di errore viene stampato. La traccia non viene stampata solo quando viene generata un'eccezione a causa di un errore PHP. Nel metodo Illuminate/Foundation/Bootstrap/HandleExceptions.php
, gli errori di PHP bootstrap
vengono convertiti in Eccezioni. Quando si verifica ciò, viene generata un'eccezione, ma il -v viene in qualche modo ignorato durante la stampa. Questo è molto scomodo perché rende difficile il debug delle app CLI.
Penso che la soluzione possa essere trovata in vendor/symfony/console/Application.php
, metodo renderException
.
ho intenzione di scavare ulteriormente in seguito, a meno che qualcun altro può indicare la soluzione più veloce di me :-)
Utilizzo di Laravel 5.3 e sembra funzionare. Non avevo idea di -v e adesso. Grazie. –