此包已被弃用且不再维护。作者建议使用 league/booboo 包。

为PHP提供错误处理程序,可以执行各种目的的错误处理程序堆栈。

2.1 2017-12-13 15:55 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:42:25 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的功能。(我们也很喜欢拉取请求;请分享您的创新!)

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发送电子邮件。不要提交问题,因为它们是公开的!