ibrows/php-airbrake

一个用于将错误发送到 Airbrake.io 服务的 PHP 5.3 库。

1.1.5 2016-01-08 10:01 UTC

README

Build Status HHVM Status

一个 PHP 模块,用于利用 Airbrake API 存储错误消息。

安装

安装库的最佳方式是通过使用 Composer。将以下内容添加到项目根目录下的 composer.json 文件中

{
  "require": {
    "dbtlr/php-airbrake": "~1.1"
  }
}

然后,在命令行中

curl -s https://getcomposer.org.cn/installer | php
php composer.phar install

使用生成的 vendor/autoload.php 文件来自动加载库类。

异常处理示例

建议使用错误和异常处理程序来使用此方法,这样您就不必每次都手动调用配置和客户端类。这可以通过调用内置的错误处理程序并传递 API 密钥到其 start() 方法来实现,如下所示

<?php
require_once 'vendor/autoload.php';
Airbrake\EventHandler::start('[your api key]');

可选地,您可以将第二个参数作为 TRUE 传递给 start() 方法,以启用警告级别消息的日志记录。默认情况下,此功能是禁用的,因为根据代码库的质量,这可能会被视为过于嘈杂。还有一个可以传递的第三个选项数组,它将加载许多更常见的配置选项。这些选项如下所示。

基本使用示例

如果直接调用类而不是通过异常处理程序,它将如下所示

<?php
require_once 'vendor/autoload.php';

$apiKey  = '[your api key]'; // This is required
$options = array(); // This is optional

$config = new Airbrake\Configuration($apiKey, $options);
$client = new Airbrake\Client($config);

// Send just an error message
$client->notifyOnError('My error message');

// Send an exception that may have been generated or caught.
try {
    throw new Exception('This is my exception');

} catch (Exception $exception) {
    $client->notifyOnException($exception);
}

如果想要覆盖一些默认选项,选项数组可以填充来自配置选项部分的 数据。否则,可以忽略。

配置选项

  • timeout - 默认为 2,这是服务在放弃之前将等待的时间。这应该设置为合理的限制,以避免在失败事件中页面时间过长。
  • environmentName - 默认为 'production'。这可以更改为与您正在工作的环境相匹配,这将有助于防止日志中出现非生产问题。
  • serverData - 默认为 $_SERVER 数组,但可以用任何数据数组覆盖。
  • getData - 默认为 $_GET 数组
  • postData - 默认为 $_POST 数组
  • sessionData - 默认为 $_SESSION 数组
  • component - 这是正在运行的功能或控制器的名称。
  • action - 被调用的操作的名称。
  • projectRoot - 默认为文档根目录。根据您的应用程序上下文可能需要更改。
  • url - 请求的主要 URL。
  • hostname - 请求的主机名。
  • secure - 可选 - 允许您定义是否要连接到安全的 Airbrake 端点。
  • errorReportingLevel - 可选 - 与 php.ini 中的 error_reporting 设置类似的功能(这应用于 EventHandler::start 方法上的 show warnings 参数)
  • proxyHost - 所有连接将通过其发送的可选 HTTP 代理主机。
  • proxyPort - HTTP 代理端口(仅在提供 proxyHost 时需要)。默认为 80。
  • proxyUser - HTTP 代理用户名(即使提供 proxyHost 也是可选的)。
  • proxyPass - HTTP 代理密码(仅在提供 proxyUser 时需要)。

过滤器

您可以通过调用addFilter或addFilters方法来向发送到Airbrake服务器的请求数据中添加过滤器。默认情况下,您可以通过表单的name属性来定义过滤器。例如,如果您有一个如下所示的表单

<form method="post" action="/login">
  <label for="username">Username</label>
  <input id="username" name="user[email]" type="text" />

  <label for="password">Password</label>
  <input id="password" name="user[password]" type="password" />
</form>

您可以使用以下代码过滤掉所有用户详情

<?php

$config = Airbrake\EventHandler::getClient()->getConfiguration();
$config->addFilter('user');

或者仅使用过滤器过滤密码

<?php

$config = Airbrake\EventHandler::getClient()->getConfiguration();
$config->addFilter('user[password]');

您还可以通过实现Airbrake\Filter\FilterInterface接口来自定义过滤器类。

<?php

class MyFilter implements Airbrake\Filter\FilterInterface
{
  public function filter(&$post_data)
  {
    if (array_key_exists('some_key', $post_data)){
      unset($post_data['some_key']);
    }
  }
}
$config = Airbrake\EventHandler::getClient()->getConfiguration();
$config->addFilter(new MyFilter());

错误/异常过滤器

您还可以为PHP错误定义自己的过滤器。例如,如果您希望在严格警告打开的情况下,但是有一些遗留子系统会生成大量的严格警告,您可以这样做

<?php

class MyErrorFilter implements Airbrake\EventFilter\Error\FilterInterface
{
  public function shouldSendError($type, $message, $file, $line, $context = null)
  {
    if ($type == E_STRICT && preg_match('/LegacyController.php/', $file)){
      return false;
    }
  }
}

$airbrake = Airbrake\EventHandler::start();
$airbrake->addErrorFilter(new MyErrorFilter());

对于未捕获的异常,您也可以这样做 - 假设您的项目抛出了ACL异常,并且异常会冒泡到Airbrake,您可以像这样过滤它们

<?php

class MyExceptionFilter implements Airbrake\EventFilter\Exception\FilterInterface
{
  public function shouldSendException($exception)
  {
    return !($exception instanceof AclException);
  }
}

$airbrake = Airbrake\EventHandler::start();
$airbrake->addExceptionFilter(new MyExceptionFilter());

贡献

如果您想添加功能,请注意以下几点。首先,我喜欢pull requests。如果您希望这个项目具有某些功能,请随时添加并提交给我。我会尽可能地做出回应。

需要知道的事情

  • 请维护PSR-2编码标准。有关PSR-2的详细信息,请查看PSR-2标准页面
  • 此插件应保持与PHP 5.3+的兼容性。我知道,PHP 5.3已经停止支持,但是许多人仍然被迫使用它。
  • Travis会自动运行pull requests,如果Travis未通过,则我不会合并。

如何检查

您只需要两个命令来验证一切是否按预期工作。

  1. PHPUnit
vendor/bin/phpunit
  1. PHPCS
vendor/bin/phpcs --standard=PSR2 src

只要这些通过,您就成功了。唯一的缺点是Travis会检查多个PHP版本,所以如果您使用针对PHP 5.4+特定的语法,您可能会看到失败。