2016-04-14 55 views
0

所以這個問題更多地基於爲什麼只有一部分錯誤顯示錯誤本身(儘管如果有人也可以解決錯誤,這將是很好的)。什麼會導致錯誤在Laravel沒有消息

但是,我在Laravel中有一個日誌記錄功能,可以通過電子郵件發送錯誤通知並記錄日誌。 (誠​​然,這可能不是最佳實踐,儘管它傾向於達到其目的)。作爲顯示我發送錯誤電子郵件代碼如下......

例外\ 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); 
} 

資源\意見\電子郵件\ error.blade.php

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

但是,我剛剛收到和錯誤沒有從電子郵件的getMessage()部分的消息(如下所示)...

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} 

看起來似乎有可能是Barryvdh\Cors\HandleCors-,我用它來啓用一個跨域API或可能是一個網絡爬蟲試圖圍繞不同的路線捅我的東西,而不是我允許的。

對於我原來的問題,但:是有可能有一個錯誤,而不消息由我會與getMessage()

和獎金的問題得到它:是能夠診斷的路線錯誤我與獲得的有限信息相得益彰?

回答

1

對原始問題的回答是肯定的,你可以有一個沒有消息的異常。

你的獎金問題的答案是肯定的,你可以根據當前的信息得到一個有根據的猜測。當你這樣做時,這實際上向你顯示了你原來問題的答案。

從堆棧跟蹤中可以看出,最後調用的方法(從第0行開始)爲Illuminate\Routing\RouteCollection->match。如果您進入the code並查看此方法,則可以看到,如果沒有路由匹配,它會調用throw new NotFoundHttpException;

鑑於這是此方法明確拋出的唯一異常,以及未設置消息而拋出的事實,這是一個相當不錯的猜測,這是您的錯誤。

所以,基本上,有人試圖去一個不存在的路線。

相關問題