Laravel框架 之 日志和错误

本文的示例代码参考log & bugsnag

目录

日志

composer create-project laravel/laravel log --prefer-dist "5.5.*"
# cd log
vim routes/web.php
<?php

Route::get('/', function () {
    Log::info('This is some useful information.');
    Log::warning('Something could be going wrong.');
    Log::error('Something is really going wrong.');
    return 'index';
});
echo "APP_LOG=daily" >> .env
  • 测试
php artisan serve
curl localhost:8000 # 返回"index"
cat $(find storage/logs -name "[0-9a-zA-Z]*" | tail -n1)
[2018-04-27 09:29:23] local.INFO: This is some useful information.
[2018-04-27 09:29:23] local.WARNING: Something could be going wrong.
[2018-04-27 09:29:23] local.ERROR: Something is really going wrong.
#Linux
sed -i "s/APP_LOG_LEVEL=debug/APP_LOG_LEVEL=warning/g" .env

# MacOS
sed -i "" "s/APP_LOG_LEVEL=debug/APP_LOG_LEVEL=warning/g" .env
  • 测试
# 更新.env配置后服务需要重启生效
php artisan serve
rm storage/logs/*.log

curl localhost:8000 # 返回"index"
cat $(find storage/logs -name "[0-9a-zA-Z]*" | tail -n1)
[2018-04-27 09:36:31] local.WARNING: Something could be going wrong.
[2018-04-27 09:36:31] local.ERROR: Something is really going wrong.

错误

composer create-project laravel/laravel bugsnag --prefer-dist "5.5.*"

注意

错误处理在app/Exceptions/Handler.php文件中

cat app/Exceptions/Handler.php| tail -25
    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }
}

其中

在report函数中将错误上报到第三方错误统计平台中

在render函数中处理异常渲染HTTP响应

下面

我们将以第三方错误统计平台Bugsnag为例 来看一下错误处理的效果

# cd bugsnag
composer require "bugsnag/bugsnag-laravel:^2.0"
vim config/app.php
return [
    'providers' => [
        /*
         * Package Service Providers...
         */
        Bugsnag\BugsnagLaravel\BugsnagServiceProvider::class,
    ],
];
echo "BUGSNAG_API_KEY=***" >> .env

这里的BUGSNAG_API_KEY是在Bugsnag注册后得到的

vim app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
    }

    public function register()
    {
        $this->app->alias('bugsnag.logger', \Illuminate\Contracts\Logging\Log::class);
        $this->app->alias('bugsnag.logger', \Psr\Log\LoggerInterface::class);
    }
}
vim routes/web.php
<?php

use Bugsnag\BugsnagLaravel\Facades\Bugsnag;

Route::get('/', function () {
    Bugsnag::notifyException(new RuntimeException("Test error"));
    return 'index';
});
  • 测试
php artisan serve
curl localhost:8000 # 返回"index"

此时 打开bugsnag管理后台可以看到错误报告如下

error-reporting-01.png

参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,463评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,625评论 25 709
  • From:Python之日志处理(logging模块) - 云游道士 - 博客园 https://www.cnbl...
    vigny的先生阅读 7,555评论 3 5
  • 你呀,不要只顾着向前冲,累了,就要坐下来学习学习,你要知道,学习在这世界上肯定是对我们唯一有益无害的东西了,你只顾...
    穆炎阅读 3,114评论 2 5
  • 1、 最近对面来了一批做招聘的人,这几天最大的乐趣就是听对面的大姐(且让我再嫩一回)训一个(可能是)实习的男生。 ...
    唐吉哇哇阅读 1,293评论 0 0