league / booboo
为PHP提供错误处理器,可以执行用于各种目的的错误处理器栈。
Requires
- php: >=5.6.0
- psr/log: ~1.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~5.7
- sentry/sentry: ~1.7
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
不应该成为一个异常。
如果希望为更小的错误抛出异常,运行者对象提供了一个强制所有错误都阻塞的方法。默认情况下,这是关闭的。
BooBoo不会出现在你的堆栈跟踪中
因为我们默认不抛出异常,所以我们不会为小错误生成堆栈跟踪。这意味着BooBoo不会出现在你的日志中,当它处理其他地方生成的异常时,也不会附加在那里。
BooBoo是为日志记录而构建的
此解决方案考虑到日志记录,因此您可以将符合PSR-3的日志记录解决方案插入并开始使用。BooBoo对错误、警告和通知的记录非常敏感;异常记录为关键,E_STRICT
/E_DEPRECATED
警告记录为信息。即使在格式化被禁用时,处理器也会运行,因此你的日志记录始终开启,即使在生产环境中也是如此。
BooBoo是为了扩展而设计的
我们不可能考虑到所有您的用例,但我们知道您可以。这就是为什么我们使用标准接口,使扩展和增强BooBoo功能变得容易。(我们也很喜欢pull request;请分享您的创新!)
BooBoo正在积极维护
PHP 每年都在变化,BooBoo 也会随之而变。
入门指南
实例化
您需要实例化的主要对象是 League\BooBoo\BooBoo
。此对象负责设置错误处理器,以及处理错误和异常。在构造函数中,它接受可选的处理器和格式化程序参数。
<?php $booboo = new League\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 League\BooBoo\Formatter\HtmlFormatter());
控制哪个格式化程序进行格式化
可能会有这样的情况,您希望某些格式化程序处理特定错误的格式化,而其他格式化程序处理其他错误类型的格式化。格式化程序支持这一点。
例如,如果您希望所有警告或更高级别的错误都显示在浏览器中,但低于此级别的错误被忽略,您可以配置格式化程序以处理这种情况
<?php $html = new League\BooBoo\Formatter\HtmlFormatter(); $null = new League\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 联系。不要提交问题,因为它们是公开的!