2016-04-14 2 views
0

So basiert diese Frage mehr darauf, warum nur ein Teil eines Fehlers zeigt, dass der Fehler selbst (obwohl es großartig wäre, wenn jemand auch den Fehler lösen könnte).Was würde einen Fehler verursachen, keine Nachricht in Laravel zu haben

Ich habe jedoch eine Protokollfunktion in Laravel, die eine Fehlermeldung per E-Mail versendet und sie protokolliert. (Zugegebenermaßen ist es wahrscheinlich nicht die beste Praxis, obwohl es dazu neigt, seinen Zweck zu erfüllen). Mein Code zum Senden der Fehler E-Mail wird wie unten gezeigt ...

Ausnahmen \ handler.php

public function report(Exception $e) 
{ 
    \Mail::send('emails.error', ['error' => $e], function ($m) use ($e) { 


     $m->from('[email protected]', 'MMC API | Laravel Error '); 

     $m->to('[email protected]') 
     ->cc('[email protected]') 
     ->subject($e->getMessage()); 
    }); 

    parent::report($e); 
} 

resources \ views \ E-Mails \ error.blade.php

<p><strong>Message: </strong>{{ $error->getMessage() }}</p> 
<p><strong>File: </strong>{{ $error->getFile() }}</p> 
<p><strong>Trace: </strong>{{$error->getTraceAsString()}}</p> 

Allerdings habe ich gerade erhalten und Fehler ohne die Nachricht aus dem getMessage() Abschnitt der E-Mail (wie unten gezeigt) ...

Message: 
File: C:\api\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php 
Trace: 
    #0 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(823): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request)) 
    #1 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(691): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request)) 
    #2 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(675): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) 
    #3 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(246): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
    #4 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request)) 
    #5 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #6 C:\api\vendor\barryvdh\laravel-cors\src\HandleCors.php(34): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #7 [internal function]: Barryvdh\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure)) 
    #8 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) 
    #9 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
    #10 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #11 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(44): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #12 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) 
    #13 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) 
    #14 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
    #15 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #16 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #17 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #18 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
    #19 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(99): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
    #20 C:\api\public\index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
    #21 {main} 

Es scheint, wie könnte es möglicherweise etwas mit den Barryvdh\Cors\HandleCors- falsch gewesen, denen ich verwende, um ein Cross-Domain-API oder möglicherweise einen Web-Crawler zu ermöglichen versuchen, um einen anderen Weg zu stoßen als das, was ich kann.

Für meine ursprüngliche Frage aber: ist es möglich, ohne eine Nachricht einen Fehler zu haben, mit dem ich es mit getMessage()

Und Bonus Frage kommen könnte: ist es möglich, die Strecke Fehler zu diagnostizieren I‘ m mit den begrenzten Informationen, die ich zur Verfügung habe?

Antwort

1

Die Antwort auf Ihre ursprüngliche Frage ist ja, Sie können eine Ausnahme haben, die keine Nachricht hat.

Die Antwort auf Ihre Bonusfrage ist ja, Sie können eine begründete Schätzung basierend auf den aktuellen Informationen erhalten. Wenn Sie dies tun, zeigt Ihnen das tatsächlich die Antwort auf Ihre ursprüngliche Frage.

Aus dem Stacktrace zeigt, dass die letzte Methode (aus Zeile # 0) Illuminate\Routing\RouteCollection->match aufgerufen wurde. Wenn Sie in the code gehen und diese Methode betrachten, können Sie sehen, dass throw new NotFoundHttpException; aufgerufen wird, wenn keine Route gefunden wird.

Da dies die einzige Ausnahme ist, die explizit von dieser Methode ausgelöst wird, sowie die Tatsache, dass sie ohne das Setzen einer Nachricht ausgelöst wird, ist es ziemlich wahrscheinlich, dass dies Ihr Fehler ist.

Also, im Grunde versuchte jemand, auf eine Route zu gehen, die nicht existierte.

Verwandte Themen