bafs/booboo

此包已被废弃,不再维护。未建议替代包。

为PHP提供错误处理器,可以执行用于各种目的的错误处理器栈。

维护者

详细信息

github.com/BafS/booboo

源代码

1.0.0 2015-02-25 19:12 UTC

This package is auto-updated.

Last update: 2022-02-01 12:57:12 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 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发送电子邮件。不要提交问题,因为它们是公开的!