abcarroll / 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
不应该成为一个异常。
运行器对象提供了一种强制所有错误变为阻塞的方法,如果您希望为更小的错误抛出异常。默认情况下这是关闭的。
BooBoo不会出现在您的堆栈跟踪中
因为我们默认不抛出异常,所以我们不会为小错误生成堆栈跟踪。这意味着BooBoo不会显示在您的日志中,并且当它处理由其他地方生成的异常时,也不会附加在那里。
BooBoo是为日志记录而构建的
此解决方案考虑到日志记录,因此您可以轻松地插入符合PSR-3的日志记录解决方案并开始使用。BooBoo足够敏感,可以将错误、警告和通知记录为这样的内容;异常被记录为关键,而 E_STRICT
/E_DEPRECATED
警告被记录为信息。即使在格式化禁用的情况下,处理程序也会运行,因此您的日志记录始终开启,即使在生产环境中也是如此。
BooBoo是为扩展而设计的
我们不可能考虑到所有您的用例,但我们知道您可以。这就是为什么我们使用标准接口来简化扩展和增强BooBoo功能。我们还喜欢pull request;请分享您的创新!
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是否为真。与格式化器不同,您不能直接将处理器指向忽略某些错误;这假设您可以使用处理器工作的服务来处理这一点。
文档
安全
如果您已识别出安全漏洞,请直接发送电子邮件至brandon@brandonsavage.net。请不要提交问题,因为它们是公开的!