bafs / booboo
为PHP提供错误处理器,可以执行用于各种目的的错误处理器栈。
Requires
- php: >=5.4.0
- psr/log: ~1.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.3
- raven/raven: 0.10.0
Suggests
- raven/raven: Use Raven 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 requests;请分享您的创新!)
BooBoo 正在积极维护
PHP 每年都在变化,BooBoo 也会随之变化。
入门指南
实例化
您需要实例化的主要对象是 League\BooBoo\Runner
。该对象负责设置错误处理器,以及处理错误和异常。在构造时,它接受可选的处理器和格式化程序参数。
<?php $runner = new League\BooBoo\Runner(); $runner->register(); // Registers the handlers
非常重要,必须调用 Runner::register()
,否则对象不会将自己注册为 PHP 的错误处理器。
格式化程序非常重要!
当您进行开发时,您希望在浏览器中查看错误。为了做到这一点,您必须提供一个格式化程序。没有格式化程序,系统将无法智能地知道如何显示错误。结果,运行器将抛出异常,并且不会注册错误处理器。
该库提供了四个格式化程序,方便您使用
HtmlFormatter
- 以与 PHP 错误格式相同的方式格式化错误。HtmlTableFormatter
- 类似于 Xdebug,格式化错误和异常,包括完整的堆栈跟踪,甚至对错误也是如此。JsonFormatter
- 适用于向 API 显示错误。CommandLineFormatter
- 如果您正在使用命令行,这将生成美观的命令行错误。NullFormatter
- 此格式化程序简单地静音所有错误。您可以在 display_errors = Off 时传递此参数。添加格式化程序很容易
<?php $runner->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); $runner->pushFormatter($null); $runner->pushFormatter($html);
格式化程序和处理器是栈
格式化程序和处理器被视为栈。这意味着最后进入的将是第一个出来的。在处理仅处理某些错误的格式化程序时,这一点非常重要!
例如,在上面的示例中,我们有一个仅限于错误和警告的格式化器,另一个格式化所有错误类型。如果我们首先插入HTML处理程序,它将最后运行;这会导致NullFormatter格式化所有错误,我们将得不到任何输出。
处理程序
无论您是否想格式化错误(甚至将其输出到屏幕),您可能希望以某种方式处理它,例如记录它。BooBoo提供处理错误的方法,并提供了一个内置的PSR-3兼容的日志处理程序。
您可以通过实现HandlerInterface来创建自己的处理程序。处理程序会在display_errors为true或false的情况下都运行。与格式化器不同,您不能直接指示处理程序忽略某些错误;假设您可以通过处理程序工作的服务来处理这个问题。
文档
安全
如果您发现了安全问题,请直接通过brandon@brandonsavage.net发送电子邮件。不要提交问题,因为它们是公开的!