denosyscore / booboo
为PHP提供错误处理器,可以执行一系列用于不同目的的处理程序。
Requires
- php: ^8.0
- psr/log: ^3.0
Requires (Dev)
- mockery/mockery: ^1.6
- php-http/mock-client: ^1.4
- phpunit/phpunit: ^9.5
- sentry/sentry: ^4.6
Suggests
- sentry/sentry: Use Sentry for passing errors to Sentry.
README
质量
目的
一个PHP错误处理器,允许执行处理程序和格式化程序来查看和管理开发和生产中的错误。因为我们都会犯错。
安装
此库需要PHP 5.4或更高版本。对HHVM有一个测试被跳过,但所有其他测试都通过。BooBoo将在未来的版本中支持PHP 7。
建议您使用Composer安装此库。
$ composer require league/booboo
BooBoo符合PSR-1、PSR-2、PSR-3和PSR-4标准。如果您发现遵守上的疏忽,请通过pull request发送补丁。
依赖
BooBoo依赖于以下依赖项
psr/log
- 一个符合PSR-3的日志接口。
不需要其他依赖项。维护者建议安装monolog进行日志记录。
与现有解决方案相比的优势
BooBoo旨在帮助使开发更容易,同时提供一个可以部署到生产环境的集成解决方案。BooBoo具有以下优势
默认情况下错误是非阻塞的
某些解决方案会抛出所有错误的异常,导致每个通知都变成致命错误。BooBoo不会这样做。对于非致命错误,我们以有意义的方式显示错误,并让程序继续运行。一个E_NOTICE
不应该变成一个异常。
Runner对象提供了一个方法来强制所有错误都阻塞,如果您希望为更小的错误抛出异常。默认情况下是关闭的。
BooBoo不会出现在您的堆栈跟踪中
因为我们默认不会抛出异常,所以对于小错误不会生成堆栈跟踪。这意味着BooBoo不会出现在您的日志中,当它处理由其他地方生成的异常时,也不会附加在那里。
BooBoo是为日志记录而构建的
此解决方案旨在考虑日志记录,因此您可以插入和播放一个符合PSR-3的日志记录解决方案并继续使用。BooBoo足够敏感,可以将错误、警告和通知作为此类记录;异常记录为关键,E_STRICT
/E_DEPRECATED
警告记录为信息。即使禁用了格式化,处理器也会运行,因此您的日志记录始终处于开启状态,即使在生产环境中也是如此。
BooBoo是为扩展而设计的
我们不可能考虑所有您的用例,但我们知道您可以。这就是为什么我们使用标准接口来简化扩展和增强BooBoo功能。(我们也喜欢pull request;请分享您的创新!)
BooBoo正在积极维护
PHP每年都在变化,BooBoo也会随之变化。
入门
实例化
您需要实例化的主要对象是 Denosys\BooBoo\BooBoo
。此对象负责设置错误处理程序,并处理错误和异常。在构造时,它接受处理程序和格式化程序的可选参数。
<?php $booboo = new Denosys\BooBoo\BooBoo(); $booboo->register(); // Registers the handlers
调用 BooBoo::register()
非常重要,否则对象不会将自己注册为 PHP 的错误处理程序。
格式化程序非常重要!
在开发过程中,您希望在浏览器中查看错误。为了做到这一点,您必须提供一个格式化程序。没有格式化程序,系统无法智能地知道如何显示错误。结果,运行器将抛出异常,并且不会注册错误处理程序。
库附带四个格式化程序,方便您使用。
HtmlFormatter
- 将错误格式化为与 PHP 错误格式相同。HtmlTableFormatter
- 类似于 Xdebug,格式化错误和异常,具有完整的堆栈跟踪,包括错误。JsonFormatter
- 非常适合将错误显示到 API 中。CommandLineFormatter
- 如果您使用命令行,这将生成漂亮的命令行错误。NullFormatter
- 此格式化程序简单地屏蔽所有错误。您可以在 display_errors = Off 时传递此参数。添加格式化程序很简单
<?php $booboo->pushFormatter(new Denosys\BooBoo\Formatter\HtmlFormatter());
控制哪个格式化程序进行格式化
有时您可能希望某些格式化程序处理特定错误类型的格式化,而其他格式化程序处理其他错误类型的格式化。格式化程序支持此功能。
例如,如果您想将所有警告或更高级别的错误显示在浏览器中,但忽略低于此级别的错误,您可以配置格式化程序以处理这种情况
<?php $html = new Denosys\BooBoo\Formatter\HtmlFormatter(); $null = new Denosys\BooBoo\Formatter\NullFormatter(); $html->setErrorLimit(E_ERROR | E_WARNING | E_USER_ERROR | E_USER_WARNING); $null->setErrorLimit(E_ALL); $booboo->pushFormatter($null); $booboo->pushFormatter($html);
格式化程序和处理程序是一个堆栈
格式化程序和处理程序被视为一个堆栈。这意味着最后进入的将是第一个出来的。当处理仅处理某些错误的格式化程序时,这一点非常重要!
例如,在上面的示例中,我们有一个仅限于错误和警告的格式化程序,另一个格式化所有错误类型。如果我们首先插入 HTML 处理程序,它将被最后运行;这将导致 NullFormatter 格式化所有错误,我们将没有输出。
处理程序
无论您是否想要格式化错误(甚至将其输出到屏幕),您可能希望以某种方式处理它,例如记录它。BooBoo 提供了一种处理错误的方法,并提供了内置的 PSR-3 兼容的记录处理程序。
您可以实现 HandlerInterface 创建自己的处理程序。无论 display_errors 是否为真,都会运行处理程序。与格式化程序不同,您不能直接将处理程序指向忽略某些错误;假定您可以使用处理程序工作的服务来处理这个问题。
文档
安全性
如果您已识别出一个安全问题,请直接通过电子邮件 brandon@brandonsavage.net 联系。请不要提交问题,因为它们是公开的!