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