redfunction / laravel-error-reporting
Laravel 错误报告
0.1.13-beta
2018-04-12 08:21 UTC
Requires
- php: >=7.0
- laravel/framework: 5.5.*
Requires (Dev)
- mockery/mockery: ~1
- orchestra/testbench: ~3.5
- phpunit/phpunit: ~6
This package is not auto-updated.
Last update: 2024-09-20 23:13:46 UTC
README
安装
composer
直接下载
composer require redfunction/laravel-error-reporting
composer.json
{ "require": { "redfunction/laravel-error-reporting" : "*" } }
composer update
环境(配置)
ERROR_REPORTING_EMAIL_FROM=example@example.com ERROR_REPORTING_EMAIL_FROM_NAME="Example name" ERROR_REPORTING_EMAIL_RECIPIENTS="example.recipients@example.com second.recipients@example.com" ERROR_REPORTING_EMAIL_SUBJECT="Test %APP_ENVIRONMENT%" ERROR_REPORTING_LOG_STACK_TRACE=true ERROR_REPORTING_JSON_RESPONSE_LONG_MESSAGE=true
config/error.reporting.php
<?php return array( 'doNotReportClasses' => [ Illuminate\Auth\Access\AuthorizationException::class, Illuminate\Foundation\Testing\HttpException::class, Illuminate\Database\Eloquent\ModelNotFoundException::class, Illuminate\Validation\ValidationException::class ], 'doNotReportIpv4Addresses' => [ '127.0.0.1', '192.168.0.0/24' ], 'emailFrom' => env("ERROR_REPORTING_EMAIL_FROM"), 'emailFromName' => env("ERROR_REPORTING_EMAIL_FROM_NAME"), 'emailRecipients' => preg_split("/\\s+/", env("ERROR_REPORTING_EMAIL_RECIPIENTS", "")), 'emailSubject' => env("ERROR_REPORTING_EMAIL_SUBJECT"), 'emailTemplate' => '', 'customExceptionRender' => null, 'logStackTrace' => env("ERROR_REPORTING_LOG_STACK_TRACE", false), 'jsonResponseLongMessage' => env("ERROR_REPORTING_JSON_RESPONSE_LONG_MESSAGE", false), 'encryptionAlgorithm' => 'md5', 'encryptionFields' => [ 'HTTP_AUTHORIZATION', [ 'regexPattern' => 'PASSWORD$', 'useUpperCase' ] ] );
如果您不想报告异常类,则可以将其添加到 doNotReport 数组中。如果您想使用自定义模板,则必须设置 emailTemplate 值。
添加到 Laravel 插件
您可以选择
- bootstrap/app.php
- config/app.php
bootstrap/app.php
您必须添加代码。
$app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, RedFunction\ErrorReporting\ExceptionReportHandler::class );
config/app.php
您必须将 \RedFunction\ErrorReporting\Providers\ExceptionReportProvider::class
添加到 providers。
'providers' => [ ... \RedFunction\ErrorReporting\Providers\ExceptionReportProvider::class, ... ]
示例代码
报告正在工作
您必须添加 \ErrorReporting\Interfaces\IReportException
类的实现。报告可以调用方法(getLogMessage, getLogType, getRedirectPage)
<?php /** * Class ExceptionUsingReport * */ class ExceptionUsingReport extends Exception implements RedFunction\ErrorReporting\Interfaces\IReportException { /** * @return string */ public function getLogMessage() { return "Error 500: reason..."; } /** * 1 - INFO * 2 - WARNING * 3 - NOTICE * 4 - ERROR * @return integer */ public function getLogType() { return 4; } /** * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null */ public function getRedirectPage() { return null; } }
报告不会通过电子邮件发送。
您必须添加 trait \ErrorReporting\Exceptions\Traits\DoNotReportToEmail
<?php /** * Class ExceptionNotUsingReport * */ class ExceptionNotUsingReport extends Exception implements RedFunction\ErrorReporting\Interfaces\IReportException { use RedFunction\ErrorReporting\Traits\DoNotReportToEmail; /** * @return string */ public function getLogMessage() { return "Error 500: reason..."; } /** * 1 - INFO * 2 - WARNING * 3 - NOTICE * 4 - ERROR * @return integer */ public function getLogType() { return 4; } /** * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null */ public function getRedirectPage() { return null; } }
使用自定义渲染
config error.reporting
示例代码。
'customExceptionRender' => [ 'className' => RedFunction\ErrorReporting\Examples\CustomExceptionRender::class, 'usingException' => [ RedFunction\ErrorReporting\Examples\ExceptionNotUsingReport::class ] ]
创建自定义渲染类
<?php namespace RedFunction\ErrorReporting\Examples; use Exception; use Illuminate\Http\Response; use RedFunction\ErrorReporting\AbstractCustomExceptionRender; /** * Class CustomExceptionRender * */ class CustomExceptionRender extends AbstractCustomExceptionRender { /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param Exception $e * * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ public function render($request, $e) { //TODO: You can add something, what you want. if ($e instanceof Exception) { $this->log(self::LOG_NOTICE, $e->getMessage()); return new Response($e->getMessage(), $e->getCode()); } return null; } /** * AbstractCustomExceptionRender constructor. */ public function __construct() { } }