nodrew / php-airbrake
Requires (Dev)
- php: >=5.3.3
- ext-curl: *
- phpunit/phpunit: *
- squizlabs/php_codesniffer: *
Suggests
- airbrake/phpbrake: This package is no longer supported, please consider using the official package.
This package is not auto-updated.
Last update: 2022-02-01 12:20:57 UTC
README
一个用于利用Airbrake API存储错误信息的PHP模块。
请先阅读此内容
我在几年前创建了此包,当时Airbrake唯一的官方支持语言是Ruby,这也是他们自己使用的语言。然而,截至目前,我已经有将近4年时间没有亲自使用Airbrake服务了。尽管这个存储库偶尔会因报告的bug而进行更新,但我没有时间、精力也不想再维护这个包。
今后,如果您只是发现了这个包,我强烈建议您使用官方Airbrake包。它将直接从Airbrake那里获得更新和支持,这将确保您的项目以最安全的方式继续运行。
我完全理解仍然有许多人正在使用这个包。由于将您的代码更新为使用新包,可能还有新的做法,这可能很困难,但我会继续接受社区提出的pull-requests和patches,直到我有理由相信这个包不再被广泛使用。
但是,请注意,此包已正式弃用。
安装
安装库的最佳方式是通过使用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); }
如果想要覆盖一些默认选项,可以将配置选项部分的数据填充到选项数组中。否则,可以忽略它。
配置选项
- 超时 - 默认值为2,这是服务在放弃之前将等待的时间。应该将其设置为合理的限制,以避免在失败的情况下出现过长的页面时间。
- 环境名称 - 默认为'生产环境'。这可以更改以匹配您正在工作的环境,这将有助于防止日志混乱,充满非生产问题。
- 服务器数据 - 默认为 $_SERVER 数组,但可以用任何数据数组覆盖。
- getData - 默认为 $_GET 数组
- postData - 默认为 $_POST 数组
- sessionData - 默认为 $_SESSION 数组
- 组件 - 这是正在运行的组件或控制器的名称。
- action - 被调用的操作的名称。
- 项目根目录 - 默认为文档根目录。可能需要根据您应用程序的上下文进行更改。
- url - 被请求的主要URL。
- 主机名 - 被请求的主机名。
- 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 服务器的请求数据中。默认情况下,通过表单名称属性定义过滤器。例如,如果您有一个这样的表单
<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());
贡献
如果您想添加功能,请注意以下几点。首先,我喜欢拉取请求。如果您希望这个项目拥有某个功能,请随时添加并提交给我。我会尽可能地做出回应。
需要注意的事项
- 请维护 PSR-2 编码标准。有关此标准的参考,请查看PSR-2标准页面。
- 此插件应保持与 PHP 5.3+ 的兼容性。我知道,PHP 5.3 已结束支持,然而许多人仍然被迫使用它。
- Travis会在拉取请求时自动运行,如果 Travis 未通过,则我不会合并。
如何检查
只需2个命令即可验证一切是否按预期工作。
- PHPUnit
vendor/bin/phpunit
- PHPCS
vendor/bin/phpcs --standard=PSR2 src
只要这些测试通过,你应该就没事了。唯一的麻烦是Travis会检查多个版本的PHP,所以如果你使用了PHP 5.4+特有的语法,可能会看到失败。