Laravel:记录错误,并显示一个很好的视图

时间:2017-09-29 05:42:35

标签: php laravel

我正在尝试记录Laravel中的错误但是在它到达渲染功能之前它会抛出Chrome默认的500错误页面,我该如何捕获任何错误?

我想将所有错误记录到数据库并显示一个很好的用户友好的CUSTOM视图,但是当它没有进入渲染方法时我该怎么办?

Laravel没有成功:

List<Data> gvdta = (List<Data>)Session["Items"];
switch (this.dd_search.SelectedValue)
{
    case "emp":                
    var tb = (from ad in gvdta
              where ad!=null & ad.emp.ToLower().Contains(this.txt_Search.Text.ToLower())
              select ad);
       gvdta = tb.ToList();            
    break;
}

那么你是如何记录错误的呢?这在很多方面都是错误的。

public function render($request, Exception $exception)

另外,我的.EVN文件:

public function render($request, Exception $exception)
{
    if (strlen($exception->getMessage()) > 0) {
        $agent = new Agent();
        $errorLog = new ErrorLog;
        $errorLog->error_message = $exception->getMessage();
        $errorLog->error_file = $exception->getFile();
        $errorLog->error_line = $exception->getLine();
        $errorLog->request_ip = $request->ip();
        $errorLog->request_url = $request->root();
        $errorLog->request_device = $agent->isDesktop() ? 'Desktop' : ($agent->isMobile() ? 'Mobile' : 'Tablet');
        $errorLog->request_system = $agent->platform() . ' ' . $agent->version($agent->platform());
        $errorLog->request_browser = $agent->browser();
        $errorLog->error_happened_to = (Auth::check() ? Auth::user()->username : 'Guest');
        $errorLog->save();
    }

    return parent::render($request, $exception);
}

3 个答案:

答案 0 :(得分:2)

这就是我处理同样问题的方法。在app / Exceptions / Handler.php中:

public function report(Exception $exception)
{
    if(!config('app.debug')) {
        if ($this->shouldReport($exception)) {
            $this->logError($exception);
        }
    }
    if(env('APP_ENV') == 'local'){
        parent::report($exception);
    }
}

public function render($request, Exception $exception)
{
    if(!config('app.debug')) {
        if($this->shouldReport($exception)){
            return response()->view('errors.500', compact('exception'));
        }
    }
    return parent::render($request, $exception);
}

我添加了一个将错误写入数据库的函数logError,并且我在resources / views / errors中有一个模板--500.blade.php - 它有一个自定义错误页面。

我还使用.env中的APP_DEBUG来确定是否将错误记录到数据库并显示错误页面或在屏幕上显示错误详细信息。

答案 1 :(得分:1)

您可以尝试使用第三方软件包进行日志和放大显示错误。

例如

  1. Laravel 5 log viewer
  2. LogViewer

答案 2 :(得分:0)

Laravel有一种报告方法,您可以使用该方法记录或在发生错误时执行任何操作

// File App \ Exceptions \ Handler.php; 在Handler.php中添加或修改此方法。

public function report(Exception $exception)
{
    if ($this->shouldReport($exception)) { //prevent uneccessary error reporting such as 404 errors

       $e =FlattenException::create($exception);
        $handler =new \Symfony\Component\Debug\ExceptionHandler();
        $error_message =$handler->getHtml($e); ///Note this will give u full details of the error
            $agent = new Agent();
    $errorLog = new ErrorLog;
    $errorLog->error_message = $error_message;
    $errorLog->error_file = $exception->getFile();
    $errorLog->error_line = $exception->getLine();
    $errorLog->request_ip = $request->ip();
    $errorLog->request_url = $request->root();
    $errorLog->request_device = $agent->isDesktop() ? 'Desktop' : ($agent->isMobile() ? 'Mobile' : 'Tablet');
    $errorLog->request_system = $agent->platform() . ' ' . $agent->version($agent->platform());
    $errorLog->request_browser = $agent->browser();
    $errorLog->error_happened_to = (Auth::check() ? Auth::user()->username : 'Guest'

    parent::report($exception);
}

要查看您的视图,请修改.env并将APP_DEBUG从true更改为false,例如APP_DEBUG = false

您还可以决定仅在应用正在投放时记录错误。

if (App::environment('production')) {
 //log stuffs
}

中的自定义500错误
resources/views/errors/500.blade.php

enter image description here Laravel将自动提供该页面