jonatanmdez/php-error-handlers

PHP 库,包含对流行错误处理服务的封装

0.0.5 2016-04-20 05:17 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:19:07 UTC


README

Build Status Coverage Status Total Downloads Latest Stable Version Documentation Status Gratipay

错误处理器

包含对流行错误处理服务的封装的包。

包含 CakePHP 3 的集成库。

需求

  • PHP 5.5+
  • 耐心

安装

# install it
composer require josegonzalez/php-error-handlers

# load it
bin/cake plugin load Josegonzalez/ErrorHandlers

使用

您可以将 Handler 类注册为 PHP 错误和异常的处理程序。

// Create an array of configuration data to pass to the handler class
$config = [
    'handlers' => [
        // *Can* be the class name, not-namespaced
        // The namespace will be "interpolated" in such cases
        'NewrelicHandler' => [
        ],
        // Can also include the full namespace
        'Josegonzalez\ErrorHandlers\Handler\BugsnagHandler' => [
            'apiKey' => 'YOUR_API_KEY_HERE'
        ],
        // Invalid handlers will be ignored
        'InvalidHandler' => [
        ],
    ],
];

// Register the error handler
(new \Josegonzalez\ErrorHandlers\Handler($config))->register();

// Enjoy throwing exceptions and reporting them upstream
throw new \Exception('Test Exception');

默认情况下,已注册的处理程序返回 false。这允许您链式调用错误处理程序,以便此包可以处理报告,而另一个库可以显示友好的错误消息。

可用处理程序

以下为内置处理程序及其配置选项

  • AirbrakeHandler:使用官方 airbrake php 包。
    • host:(可选 | 默认:api.airbrake.io
    • projectId:(必需 | 默认:null
    • projectKey:(必需 | 默认:null
  • BugsnagHandler:使用官方 bugsnag php 包。
    • apiKey:(必需 | 默认:null
  • MonologStreamHandler:使用 monolog StreamHandler
    • name:(可选 | 默认:error
    • handlerClass:(可选 | 默认:Monolog\Handler\StreamHandler
    • stream:(可选 | 默认:log/error.log
    • level:(可选 | 默认:Monolog\Logger::Warning
  • NewrelicHandler:使用 newrelic php 扩展
  • RaygunHandler:使用官方 raygun php 包。
    • apiKey:(必需 | 默认:null
  • SentryHandler:使用官方 sentry raven php 包。
    • dsn:(必需 | 默认:null
    • release:(可选 | 默认:null

处理程序和异常修改

修改客户端处理程序

有时修改客户端可能会有用。例如,可能需要向给定的客户端调用添加上下文信息。为此,您可以设置 clientCallback 配置键

$config = [
    'handlers' => [
        'BugsnagHandler' => [
            'clientCallback' => function ($client) {
                // do something interesting to the client
                $client->setAppVersion('1.0.0');
                return $client;
            },
        ],
    ],
];

请注意,客户端仍应响应上游库提供的现有报告 API。如果需要,您可以返回代理库,但返回初始客户端是理想的。

clientCallback 中,如果处理程序配置不正确,则 $client 可能会被设置为 null

修改异常

如果需要,可以修改特定处理程序中使用的异常。对异常的更改将仅在特定处理程序调用期间持续。

为此,为特定处理程序设置 exceptionCallback 配置键

$config = [
    'handlers' => [
        'BugsnagHandler' => [
            'exceptionCallback' => function ($exception) {
                // return null to skip reporting errors
                if ($exception instanceof \Error) {
                    return null;
                }
                return $exception;
            },
        ],
    ],
];

您可以返回另一个异常或 null。在后一种情况下,内置处理程序将跳过报告给定的异常。

自定义处理程序

每个处理程序应实现 Josegonzalez\ErrorHandlers\Handler\HandlerInterface 接口。此接口包含一个方法

public function handle($exception);
  • PHP 5.x 错误将在发送到 handle 方法之前替换为包装的 ErrorException 实例。
  • PHP 7.x 中的扩展 Throwable 错误将在发送到 handle 方法之前被替换为包装类 Josegonzalez\ErrorHandlers\Exception\PHP7ErrorException 的实例。
  • PHP 致命错误将在发送到 handle 方法之前被替换为包装类 Josegonzalez\ErrorHandlers\Exception\FatalErrorException 的实例。
  • PHP 异常将保持未修改的状态发送。

自定义处理器应该扩展提供的 Josegonzalez\ErrorHandlers\Handler\AbstractHandler 类。这使它们能够通过提供的 ConfigTrait 接收配置,并自定义 __construct()

CakePHP 使用方法

您需要在您的 config/app.php 中设置至少以下配置键

  • Error.config:接受与正常 PHP 使用相同的配置数组。

接下来,在您的 config/bootstrap.php 中配置提供的 ErrorHandler 类

// around line 100
$isCli = PHP_SAPI === 'cli';
if ($isCli) {
    (new \Josegonzalez\ErrorHandlers\Cake\ConsoleErrorHandler(Configure::read('Error')))->register();
} else {
    (new \Josegonzalez\ErrorHandlers\Cake\ErrorHandler(Configure::read('Error')))->register();
}

运行测试

是的,测试需要 CakePHP。欢迎提交拉取请求!

许可证

MIT 许可证 (MIT)

版权所有 © 2015 Jose Diaz-Gonzalez

特此授予任何获得此软件及其相关文档文件(以下简称“软件”)副本的人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他法律行为,是否由软件或其使用或其他方式引起。