我正在尝试记录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);
}
答案 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)
答案 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