1、简介

开始一个新的Lumen项目的时候,错误异常处理已经默认为你配置好了。此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库。

2、配置

2.1 错误详情

配置文件.env中的APP_DEBUG配置选项控制浏览器显示的错误详情数量。

对本地开发而言,你应该设置环境变量APP_DEBUG值为true。在生产环境,该值应该被设置为false

3、异常处理器

所有异常都由类App\Exceptions\Handler处理,该类包含两个方法:reportrender。下面我们详细阐述这两个方法。

3.1 report方法

report方法用于记录异常并将其发送给外部服务如Bugsnag。默认情况下,report方法只是将异常传递给异常被记录的基类,你可以随心所欲的记录异常。

例如,如果你需要以不同方式报告不同类型的异常,可使用PHP的instanceof比较操作符:

/**
* 报告或记录异常
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e){
if ($e instanceof CustomException) {
//
} return parent::report($e);
}

通过类型忽略异常

异常处理器的$dontReport属性包含一个不会被记录的异常类型数组,默认情况下,404错误异常不会被写到日志文件,如果需要的话你可以添加其他异常类型到这个数组。

3.2 render方法

render方法负责将给定异常转化为发送给浏览器的HTTP响应,默认情况下,异常被传递给为你生成响应的基类。然而,你可以随心所欲地检查异常类型或者返回自定义响应:

/**
* 将异常渲染到HTTP响应中
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e){
if ($e instanceof CustomException) {
return response()->view('errors.custom', [], 500);
} return parent::render($request, $e);
}

4、HTTP异常

有些异常描述来自服务器的HTTP错误码,例如,这可能是一个“页面未找到”错误(404),“认证失败错误”(401)亦或是程序出错造成的500错误,为了在应用中生成这样的响应,使用如下方法:

abort(404);

abort方法会立即引发一个会被异常处理器渲染的异常,此外,你还可以像这样提供响应描述:

abort(403, 'Unauthorized action.');

该方法可在请求生命周期的任何时间点使用。

5、日志

Lumen日志工具基于强大的Monolog库,默认情况下,Lumen被配置为在storage/logs目录下每日为应用生成日志文件,你可以使用Log门面编写日志信息到日志中:

<?php

namespace App\Http\Controllers;

use Log;
use App\User;
use App\Http\Controllers\Controller; class UserController extends Controller{
/**
* 显示指定用户的属性
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
Log::info('Showing user profile for user: '.$id);
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}

该日志记录器提供了RFC 5424中定义的七种日志级别:alertcriticalerror,warningnoticeinfo 和 debug

Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

5.1 上下文信息

上下文数据数组也会被传递给日志方法。上下文数据将会和日志消息一起被格式化和显示:

Log::info('User failed to login.', ['id' => $user->id]);

lumen 错误&日志的更多相关文章

  1. 【夯实PHP基础】nginx php-fpm 输出php错误日志

    本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...

  2. nginx php-fpm 输出php错误日志

    nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息. nginx把对php的请求发给php-fpm fastcgi进程来处理, ...

  3. SQL Server 错误日志过滤(ERRORLOG)

    一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...

  4. MySQL错误日志总结

    MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. ...

  5. MS SQL 监控错误日志的告警信息

    SQL Server的错误消息(Error Message)按照消息的严重级别一共划分25个等级,级别越高,表示严重性也越高.但是如果你统计sys.messages,你会发现,实际上只有16(SQL ...

  6. [AlwaysOn Availability Groups]SQL Server错误日志(AG)

    SQL Server错误日志(AG) SQL Server错误日志会记录影响AG的时间,比如: 1.和Windows故障转移集群交互 2.可用副本的状态 3.可用数据的状态 4.AG endpoint ...

  7. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  8. C# 记录错误日志

    程序的错误日志如何记录下来? 可以在遇到异常时,Catch异常,然后把异常的信息输出到txt文件中即可 /// <summary> /// 错误日志 /// </summary> ...

  9. nginx error_log 错误日志配置说明

    nginx的error_log类型如下(从左到右:debug最详细 crit最少): [ debug | info | notice | warn | error | crit ] 例如:error_ ...

随机推荐

  1. Github上传代码菜鸟超详细教程【转】

    最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...

  2. 如何有效使用Project(1)——编制进度计划、保存基准

    1.前言: 软件产品的研发.升级.定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点.如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配 ...

  3. to my friends-Don't give up so fast

    早上听到大学挺要好的朋友突然说要换行,心情就一股莫名的哀伤,因为当初是三个人一起约定好的,要朝着我们共同的目标而努力奋斗的,这股热情怎能这么轻易地被现实的冷水浇灭.没错,我们是刚出社会的毛头小子,我们 ...

  4. css小知识点

    1.div如何让背景是透明的 如:<div class="ha"></div> <style> .ha{ background:transpar ...

  5. git push (第一次) (转)

    原地址  http://blog.csdn.net/kazeik/article/details/9113891 下图是github在创建仓库后给的提示:按它一步步操作下去就可以了. 下图是在git命 ...

  6. 通过top命令发现plymouthd进程cpu负载达到近100% 解决办法

    最近几天一直遇到服务器cpu100%, 通过top命令发现plymouthd进程cpu负载达到近100% 解决方法:打开 /boot/grub/menu.lst , 去掉 “rhgb quiet”这两 ...

  7. 安装EditPlus

    生成注册码:http://www.jb51.net/tools/editplus/ 862C2-DABE8-E30AA-CCE33-65E69

  8. WCF 断点不会命中

    VS的调试模式改为Debug 工具—选项—调试—常规中的‘要求源文件和原始版本完全匹配’的勾去掉

  9. Oracle GoldenGate for Big Data 12.2.0.1的新特性

    ogg for bigdata 12.2已经发布,新增有如下特性:支持java replicat进程OGG12.2中开发了基于java的replicat模式,以前的版本是基于extract进程中使用u ...

  10. OpenSSL - 文件和字符MD5加密实现

    OpenSSL安装: 1.github下载最新的OpenSSL:https://github.com/openssl/openssl 2.在linux解压压缩包 3.安装OpenSSL ./confi ...