Errors & Logging

Errors & Logging

1. 介绍

当启动新项目时,错误和异常处理已经配置好了。另外,Laravel跟Monolog这个日志库集成的,这个库提供了大量的功能强大的log处理器。

2.配置

Error Detail

应用通过浏览器显示的错误细节的数量是通过在config/app.php中的debug配置项控制的。默认情况下,这个配置项是遵从APP_DEBUG环境变量的,环境变量保存在.env文件中。
对于开发者,应该将APP_DEBUG设置为true,在生产环境,应该设置为false

Log Modes

不需要经过配置,Laravel支持signle, daily, syslog, errorlog等几种日志模式。例如,如果需要使用daily日志文件取代single日志文件,只需要将config\app.php配置文件中的log设置一下就可以。

    `log` => 'daily',

Custom Monolog Configuration

可以通过使用应用的configureMonologUsing方法来对Monolog进行完全的控制。在bootstrap/app.php文件中的$app返回之前,调用这个方法即可。

    $app->configureMonologUsing(function($monolog) {
        $monolog->pushHandler(...);
});

3.异常处理

所有的异常都是被App\Exception\Handler类来处理的,这个类包含两个方法:reportrenderMethod

3.1 Report方法

report方法用来记录异常,并将异常发送到外部服务,例如BugSnag。默认情况下,report方法只是简单的将异常传递给记录异常的基础的类。然而,我们可以依据自己的想法来记录所有的异常。
例如,如果需要对各种exception单独处理,可以使用PHP的instanceof操作符。

    /**
     * Report or log an exception.
     *
     * 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);
}

忽略某些类型的exception

Handler类的$dontReport属性用来记录不需要记录日志的异常类型。默认情况下,404错误的异常不会被记录到log文件中。可以按需添加任何的exception到这个数组中。

3.2 Render方法

render方法是用来将一个给定的exception转化为一个HTTP响应,并将这个响应返回到浏览器。默认情况下,异常传送给生成响应的一个基类,但是,你也可以根据异常类型不同返回定制的响应。

    /**
     * Render an exception into an HTTP response.
     *
     * @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(page not found),401(unauthorized error)甚至500错误。为了在应用中的任何地方都能生成这样的响应,利用如下代码:

    abort(404);

abort方法会立刻生成一个异常,并被异常处理器的render方法处理。可以提供响应的文字:

    abort(403, 'Unauthorized action.');

这个方法可以在request的生命周期的任何时候调用。

自定义HTTP错误页(Custom HTTP Error Pages)

使用Laravel,可以很容易的对不同的HTTP状态码生成不同的错误页。例如,如果想自定义404页面,创建文件resources\views\errors\404.blade.php,这个页面会被应用产生的所有404错误使用。
在这个目录中的视图,需要被命名为匹配HTTP状态码。

5.日志

Laravel的日志记录功能提供了基于功能强大Monolog的简单的封装。默认情况下,laravel创建每日log,并保存在storage/logs目录下。可以使用Log外观模式来写入log。

    namespace App\Http\Controllers;

    use Log;
    use App\User;
    use App\Http\Controllers\Controller;

    class UserController extends Controller
    {
        /**
         * Show the profile for the given user.
         *
         * @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)]);
        }
    }

log提供了RFC5424中定义的八种log等级。emergency, alert, critical, error, warning, notice, info, dubug

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

上下文信息(Contextual Information)

可以传递一个上下文相关的数据给log方法,这些上下文数据会被格式化后显示在log信息中

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

访问底层的Monolog实例(Accessing the underlying Monolog Instance)

Monolog提供了大量的处理器老记录log。使用如下方式获取实例。

    $monolog = Log::getMonolog();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟没翅膀

你的打赏是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值