Wie kann ich die Anzeige Ausnahme-trace in laravel console Befehl?
Bin ich mit Laravel 5.1 erstellen Sie eine Konsole-basierte Anwendung. Während der Entwicklung möchte ich die Anzeige der exception-trace, wenn ein Fehler Auftritt. Aber selbst wenn ich mit -v,- vv oder -vvv option in php artisan
ich nicht bekommen, eine Ausnahme-trace für meine benutzerdefinierte Befehle. Ich APP_DEBUG=true
in meinem .env
noch keine Ausnahme-trace.
Ausgabe von php artisan some:unknowncommand
ist:
[InvalidArgumentException]
There are no commands defined in the "some" namespace.
Ausgabe von php artisan -v some:unknowncommand
ist:
[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
...
Nun habe ich eine sehr einfache Konsole mit dem Befehl dp genannt: - test, mit folgenden Griff-Funktion:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
generate error here
}
Ausgabe von php artisan dp:test
ist:
[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected 'error' (T_STRING)
Ausgabe von php artisan -v dp:test
ist die gleiche.
Ausgabe von php artisan -vvv dp:test
ist die gleiche.
Die log-Datei zeigen, NICHT die Ausnahme-trace, also irgendwie sollte es möglich sein, zeigen Sie es in der cli. Ich weiß nicht einmal sehen, die mit dem Namen und linenumer wo tritt der Fehler auf... Wie kann ich dafür sorgen?
Vielen Dank im Voraus!
EDIT:
Ist über sein vergebliches bemühen bohrte ein bisschen weiter. Im Fall nutze ich diese in meinem Befehl:
public function handle()
{
throw new \Exception("test exception");
}
ist und ich den Befehl php artisan -v dp:test
die Fehler-trace ausgegeben. Die Spur wird nur nicht gedruckt, wenn die Ausnahme ausgelöst wird durch einen PHP-Fehler. In Illuminate/Foundation/Bootstrap/HandleExceptions.php
Methode bootstrap
PHP-Fehler konvertiert Ausnahmen. Wenn dies Auftritt, wird eine Ausnahme geworfen wird, aber das -v-wird irgendwie ignoriert beim drucken. Dies ist sehr unpraktisch, weil es macht Debuggen von CLI-apps schwer.
Ich denke, die Lösung kann gefunden werden in vendor/symfony/console/Application.php
Methode renderException
.
Ich werde weiter Graben später, es sei denn, jemand anderes zeigen können, die Lösung schneller als ich 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fand den Grund, warum -v wird ignoriert:
in
Illuminate/Foundation/Bootstrap/HandleExceptions.php
, dierenderForConsole
methode instanziiert einConsoleOutput
- Objekt mit default-Einstellungen, nicht unter Berücksichtigung der verbosity-Einstellungen der Benutzer gefragt:Aus diesem Grund, was auch immer-v -vv oder -vvv eingestellt ist, die
$output->getVerbosity()
imvendor/symfony/console/Application.php
ist immer niedriger alsOutputInterface::VERBOSITY_VERBOSE
daher der stack-trace wird nicht gedruckt.Ich wahrscheinlich beginnen, einen Fehlerbericht senden, weil ich denke, es ist viel bequemer, wenn Fehler angezeigt werden in der CLI, wenn user sets -v.
Können Sie die Ausführlichkeit auf welcher Ebene auch immer Sie möchten, indem Sie den folgenden use-Anweisung:
Und dann fügen Sie diese am oberen Rand der Griff-Funktion:
Finden Sie in der Dokumentation für symfony-Konsole hier http://symfony.com/doc/current/console/verbosity.html
für weitere Informationen.
Wenn man sich
Illuminate\Console\Command
Klasse wird die definition der Funktion, schreibt die Fehlermeldung-Zeichenfolge an die Konsole:Nun, sehen Sie, es schreibt nur die Fehler-string, können Sie nur spielen ein wenig mit ihm zu erreichen, was Sie wollen. Sie können die Funktion call-back trace-und Ausgabe, wie viele Zeilen und Dateien rückwärts, wie Sie möchten. Erstellen Sie einfach Klasse erweitert Befehl, die Funktion überschreiben und machen Sie alle Ihre Befehle zu Erben, die command-Klasse:
error
Funktion sollte verwendet werden, nur wieinfo
,debug
etc. Es ist nicht verwendet für den Druck von Ausnahmen.