abdulqadir/laravel-exception-reporter

从您的 Laravel 应用程序中报告异常

dev-master 2020-06-21 13:30 UTC

This package is auto-updated.

Last update: 2024-09-21 23:30:06 UTC


README

Build Status Coverage Status License

基于此出色的 cakephp 包(https://github.com/ebrigham1/cakephp-error-email)的 Laravel 5 邮件异常包,旨在为开发者提供一个简单的方法,当应用程序中抛出异常时,向自己发送调试信息。默认提供的信息包括

  • 环境
  • 异常/错误 URL
  • 异常/错误类
  • 异常/错误消息
  • 异常/错误代码
  • 文件和行号
  • 堆栈跟踪

Screenshot

目录

安装

您可以使用 composer 将此插件安装到您的 Laravel 5.x 应用程序中。

运行以下命令

composer require abrigham/laravel-email-exceptions

在更新 composer 后,将服务提供者添加到 config/app.php 中的 providers 数组

如果您使用的是 laravel >= 5.5,则可以跳过将提供者添加到 config/app.php,因为它将自动发现

LaravelExceptionReporter\ExceptionReporterServiceProvider::class,

然后在 app/Exceptions/Handler.php 中替换

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

use Abrigham\LaravelEmailExceptions\Exceptions\EmailHandler as ExceptionHandler;

配置

要发布配置文件和视图,请运行以下命令

php artisan vendor:publish --provider="Abrigham\LaravelEmailExceptions\EmailExceptionsServiceProvider"

这将为您在 config/laravelEmailExceptions.php 中创建一个配置文件,并在 resources/views/vendor/laravelEmailExceptions/emailExceptions.blade.php 中创建一个视图

默认配置

'ErrorEmail' => [
    'email' => true,
    'dontEmail' => [],
    'throttle' => false,
    'throttleCacheDriver' => env('CACHE_DRIVER', 'file'),
    'throttleDurationMinutes' => 5,
    'dontThrottle' => [],
    'globalThrottle' => true,
    'globalThrottleLimit' => 20,
    'globalThrottleDurationMinutes' => 30,
    'toEmailAddress' => null,
    'fromEmailAddress' => null,
    'emailSubject' => null
]
  • email (bool) - 启用或禁用错误/异常的电子邮件发送
  • dontEmail (array) - 这与 Laravel 的 $dontReport 变量完全相同,在此处文档化:https://laravel.net.cn/docs/5.4/errors#the-exception-handler 下的通过类型忽略异常。请记住,任何在 Laravel 的 $dontReport 下的异常也不会被发送电子邮件
  • throttle (bool) - 启用或禁用异常电子邮件的节流。只有在确定确切的相同异常/错误已经通过检查缓存发送过时才会进行节流。错误/异常通过异常类 + 异常消息 + 异常代码来确定是否唯一
  • throttleCacheDriver (string) - 用于节流的缓存驱动程序,默认使用 env 文件中的 CACHE_DRIVER
  • throttleDurationMinutes (int) - 节流的持续时间(分钟),例如,如果您设置为 5,并且 BadMethodCallException 触发电子邮件,如果再次抛出相同的异常,则将在 5 分钟后才能再次发送电子邮件
  • dontThrottle (array) - 这与 dontEmail 相同,除了提供您不希望在任何时候节流的异常列表
  • globalThrottle (bool) - 启用或禁用全局节流此应用程序所有异常类型的电子邮件数量
  • globalThrottleLimit (int) - 在给定时间段内希望接收的最大电子邮件数量。
  • throttleDurationMinutes (int) - 全局节流时间的分钟数,例如输入30,当全局节流限制为10时,在发送第一封邮件后,一旦达到10封邮件的阈值,就会启动30分钟的计时器,在这30分钟内不再发送邮件。
  • toEmailAddress (string|array) - 发送异常邮件的邮箱地址,例如开发团队邮箱 dev@yoursite.com
  • fromEmailAddress (string) - 发送邮件时应使用的邮箱地址,例如 noreply@yoursite.com
  • emailSubject (string) - 邮件主题,留空则使用默认主题:在 APP_URL APP_ENV 上抛出异常

注意:来自 app/Exceptions/Handler.php 文件的 dontReport 变量也不会通过邮件发送,因为这假定如果它们不够重要到需要记录,那么它们也不够重要到需要通过邮件发送。

重要:您必须填写 toEmailAddress 和 fromEmailAddress,否则您将不会收到邮件。

基本用法

基本配置

config/laravelEmailExceptions.php 中更新您的配置值

'ErrorEmail' => [
    'email' => true,
    'dontEmail' => [],
    'throttle' => true,
    'throttleCacheDriver' => env('CACHE_DRIVER', 'file'),
    'throttleDurationMinutes' => 5,
    'dontThrottle' => [],
    'globalThrottle' => true,
    'globalThrottleLimit' => 20,
    'globalThrottleDurationMinutes' => 30,
    'toEmailAddress' => 'dev@yoursite.com',
    'fromEmailAddress' => 'noreply@yoursite.com',
    'emailSubject' => null,
]

节流

节流和全局节流都是为了防止向开发团队发送垃圾邮件而设置的。节流通过创建由异常类 + 异常消息 + 异常代码组成的唯一缓存键来实现。其目的是防止通过邮件重复报告重复的异常,给团队时间修复它们,然后再报告。

全局节流

全局节流是一个类似的想法,但是它被用来防止在给定时间段内发送超过一定数量的邮件。这通常只在应用程序发生全面故障时才是必要的,例如,网站的大部分内容都关闭了,因此从各个方向会收到许多不同类型的异常。

高级用法

更改视图

如果您使用上述命令发布了视图,您将能够通过修改 resources/views/vendor/laravelEmailExceptions/emailException.blade.php 中的视图来更改异常邮件的样式。

添加任意不发送电子邮件逻辑

如果您需要更复杂的逻辑,而不仅仅是检查 thrown exception 的 instanceof,那么有一个方便的钩子可以添加任意逻辑来决定是否应该通过邮件发送异常。

app/Exceptions/Handler.php 中实现函数 appSpecificDontEmail(Exception $exception) 等。

<?php
class Handler extends ExceptionHandler
{
    protected function appSpecificDontEmail(Exception $exception)
    {
        // add logic here to determine if exception should be emailed return true
        // if it should and return false if it should not
    }
}

注意事项

如果您在使用此功能时遇到困难,请首先确保已正确配置应用程序以发送邮件。启动邮件的最简单方法之一是在 mailtrap.io 上注册一个免费账户。一旦这样做,您就需要更新 .env 文件,并使用以下值进行替换,将用户名和密码替换为您演示收件箱中列出的那些。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-user-string
MAIL_PASSWORD=your-password-string
MAIL_ENCRYPTION=null

错误和反馈

http://github.com/abrigham1/laravel-email-exceptions/issues

许可证

版权所有 (c) 2017 Aaron Brigham

以下条件下,任何人获取本软件及其相关文档副本(“软件”)的副本,均可免费使用软件,包括但不限于使用的权利、复制的权利、修改的权利、合并的权利、出版的权利、分发权利、再许可的权利和/或销售副本的权利,并允许向软件提供方提供软件的人这样做,前提是必须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,源于、因或与软件或软件的使用或其他交易有关。