denosyscore/booboo

为PHP提供错误处理器,可以执行一系列用于不同目的的处理程序。

v1.0.3 2024-04-04 21:16 UTC

This package is auto-updated.

Last update: 2024-09-04 22:07:35 UTC


README

质量

Build Status Code Climate Test Coverage

目的

一个PHP错误处理器,允许执行处理程序和格式化程序来查看和管理开发和生产中的错误。因为我们都会犯错。

安装

此库需要PHP 5.4或更高版本。对HHVM有一个测试被跳过,但所有其他测试都通过。BooBoo将在未来的版本中支持PHP 7。

建议您使用Composer安装此库。

$ composer require league/booboo

BooBoo符合PSR-1PSR-2PSR-3PSR-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 联系。请不要提交问题,因为它们是公开的!