microparts / errors-php
为任何Web应用处理异常的复杂解决方案。
Requires
- php: >=7.2
- ext-json: *
- psr/http-message: ^1.0
- psr/log: ^1.1
- zendframework/zend-diactoros: ^2.1
Requires (Dev)
- microparts/logs-php: ^1.0
- phpunit/phpunit: ^8
- sentry/sdk: ^2.0
- symfony/var-dumper: ^4.2
This package is auto-updated.
Last update: 2020-07-19 06:45:21 UTC
README
Errors PHP包
为任何Web应用处理异常的复杂解决方案。兼容PSR-3(记录器)和PSR-7(http消息)建议。
主要功能
- 框架无关(可以集成到任何PHP Web应用);
- 您可以为HTTP响应定义自定义验证和错误格式;
- 您可以为错误定义自定义处理程序;
- 您可以将错误消息(调试输出)发送到任何服务(sentry、bugsnag)、经典记录器或同时使用两者;
- 您可以从异常消息中替换敏感数据(如PDOException中的SQL查询);
- 您可以将异常标记为“静默”,则不会将其报告给通知通道;
- 100%测试覆盖率 :)
安装
像往常一样,通过composer安装
composer require microparts/errors-php
使用方法
库不处理全局错误。因此,它需要您在应用程序服务提供程序中进行配置才能为您工作。
示例如何实现
// Simple example for most cases use Microparts\Errors\Error; $error = Error::new($debug = true); // debug parameter add exception trace to http error response.
默认情况下,将注册 PDOException
作为“掩码”,其异常消息将被替换为“数据库错误发生。请查看日志以获取详细信息”。此外,默认的 ValidationException
将注册为“静默”,以跳过有关用户错误的通知。
第二步是在您的应用程序处理错误的代码中捕获异常
use Microparts\Errors\Error; $error = Error::new($debug = true); try { throw new PDOException('test'); } catch (Throwable $e) { return $error->capture($e); // return PSR ResponseInterface }
方法 capture
返回一个PSR ResponseInterface,带有格式化的响应,以将其提供给用户。
高级使用
当然是在引号中使用“硬”
Error
对象可以配置为所需的内容。示例
// Simple example for most cases use Microparts\Errors\Error; use Microparts\Errors\Notify\LoggerNotify; use Microparts\Errors\Notify\SentryNotify; use Microparts\Logger\Logger; use Microparts\Errors\Formatter\DefaultErrorFormatter; use Microparts\Errors\Handler\DefaultErrorHandler; $error = new Error($debug = false); $error->setFormatter(new DefaultErrorFormatter($debug)); $error->setHandler(new DefaultErrorHandler()); $error->addSilentException(LogicException::class); // logic is not a need thing $error->addDatabaseException(RedisException::class); // Logger PSR compatible. // If you want use my pretty logger, just run command: // composer require microparts/logs-php $error->addNotifier(new LoggerNotify(Logger::new())); $error->addNotifier(new SentryNotify(['dsn' => $dsn]));
就这样。用❤使用。
Sentry & 通知双通道
Sentry集成可用。通过composer安装sentry SDK
composer require sentry/sdk
...然后注册新的通知器
use Microparts\Errors\Error; use Microparts\Errors\Notify\LoggerNotify; use Microparts\Errors\Notify\SentryNotify; use Microparts\Logger\Logger; $error = Error::new(); $error->addNotifier(new LoggerNotify(Logger::new())); $error->addNotifier(new SentryNotify(['dsn' => $dsn]));
两个通知将一起工作,并发送通知到两个通道。现在您应该在try/catch块中捕获异常。
测试
- 100%测试覆盖率
vendor/bin/phpunit
许可
MIT许可证
版权所有 © 2019 teamc.io,Inc. https://teamc.io
特此授予任何获取此软件及其相关文档文件(“软件”)副本的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向提供软件的人提供使用该软件的权利,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任源于合同、侵权或其他原因,以及与软件本身、使用或与软件相关的其他方式产生的责任。