mindscape / raygun4php
Raygun.com客户端,用于自动发送错误和异常。
Requires
- php: ^7.2|^8.0
- ext-json: *
- guzzlehttp/guzzle: ~7.0
- psr/log: ^1.1 || ^2.0 || ^3.0
Requires (Dev)
- justinrainbow/json-schema: ^5.2
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.0
Suggests
- ext-curl: *
- dev-master / 2.x-dev
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- 1.8.x-dev
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- v1.7.1
- v1.7.0
- v1.6.1
- v1.6.0
- 1.5.3
- 1.5.2
- 1.5.0
- 1.4.0
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- dev-sh/add-docker-example
- dev-sm/SS-607/update-user-tracking-docs-to-reference-customers
- dev-sh/batch-transport
- dev-sh/add-wrapper-class
- dev-classname-fix
- dev-win-async
This package is auto-updated.
Last update: 2024-09-08 03:16:38 UTC
README
Raygun.com的PHP 7.2+提供商
查看v1.8文档了解对PHP v5.3+的支持
安装
Raygun4PHP使用Guzzle处理数据到Raygun API的传输。建议安装cURL,但不是必需的,因为如果未安装cURL,Guzzle将使用PHP流包装器。
使用Composer
Composer是PHP的包管理工具,它可以自动获取依赖项,并支持自动加载 - 这是一种低影响力的方法,可以将Raygun4PHP集成到您的网站上。
1. 如果您使用*nix环境,请遵循说明安装Composer。Windows用户可以运行此安装程序以自动将其添加到Path。
2. 在您项目的根目录下创建一个composer.json文件,包含
{ "require": { "mindscape/raygun4php": "^2.0" } }
3. 从您的shell运行php composer.phar install
(*nix)或composer install
(Windows)。这将下载Raygun4PHP并创建适当的自动加载数据。
4. 然后在PHP文件中添加
require_once 'vendor/autoload.php';
库将导入并准备好使用。
用法
您可以自动将PHP错误和面向对象的异常发送到Raygun。RaygunClient需要一个HTTP传输(例如Guzzle或其他PSR-7兼容接口)。
提供程序中有基于Guzzle的异步和同步传输类,或者您可以使用自己的。
异步传输
以下是一个异步发送错误和异常的基本用法示例
<?php namespace { require_once 'vendor/autoload.php'; use GuzzleHttp\Client; use Raygun4php\RaygunClient; use Raygun4php\Transports\GuzzleAsync; $httpClient = new Client([ 'base_uri' => 'https://api.raygun.com', 'timeout' => 2.0, 'headers' => [ 'X-ApiKey' => 'INSERT_API_KEY_HERE' ] ]); $transport = new GuzzleAsync($httpClient); $raygunClient = new RaygunClient($transport); set_error_handler(function($errno, $errstr, $errfile, $errline) use ($raygunClient) { $raygunClient->SendError($errno, $errstr, $errfile, $errline); }); set_exception_handler(function($exception) use ($raygunClient) { $raygunClient->SendException($exception); }); register_shutdown_function(function() use ($raygunClient) { $lastError = error_get_last(); if (!is_null($lastError)) { [$type, $message, $file, $line] = $lastError; $raygunClient->SendError($type, $message, $file, $line); } }); register_shutdown_function([$transport, 'wait']); }
同步传输
对于同步传输,使用上面的代码片段,但将use Raygun4php\Transports\GuzzleAsync;
替换为
use Raygun4php\Transports\GuzzleSync;
并将$transport = new GuzzleAsync($httpClient);
替换为
$transport = new GuzzleSync($httpClient);
删除此行
register_shutdown_function([$transport, 'wait']);
请注意,如果您将其放置在具有您选择的命名空间的文件中,则上述代码应声明为在全局命名空间内(因此需要namespace { }
)。您还需要在创建$raygunClient实例之前使用上述require
语句(自动加载或手动)。
从Raygun应用复制您的应用程序的API密钥,并将其粘贴到HTTP客户端的“X-ApiKey”头部字段中。
如果处理程序位于自己的文件中,只需将其导入到您希望发送异常和错误的每个文件中,它们将被发送到Raygun。
配置
代理
可以将URL设置为HTTP客户端的“proxy”属性
// ... $httpClient = new Client([ 'base_uri' => 'https://api.raygun.com', 'proxy' => 'http://someproxy:8080', 'headers' => [ 'X-ApiKey' => 'INSERT_API_KEY_HERE' ] ]);
有关更多选项,请参阅Guzzle的代理文档。
使用日志记录器进行调试
我们建议使用兼容PSR-3 LoggerInterface(例如Monolog)的日志记录器。
在上述的异步传输示例中进一步扩展,您可以设置一个用于传输的日志记录器,如下所示
// ... use Monolog\Handler\FirePHPHandler; use Monolog\Handler\StreamHandler; use Monolog\Logger; // ... $logger = new Logger('my_logger'); $logger->pushHandler(new StreamHandler(__DIR__ . '/debug.log')); $logger->pushHandler(new FirePHPHandler()); // Create $httpClient ... $transport = new GuzzleAsync($httpClient); $transport->setLogger($logger); $raygunClient = new RaygunClient($transport); // Set error handlers ...
响应代码
- 202:Raygun API正确接收到消息
- 400:错误请求。这可能表示有效载荷无效 - 如果您继续看到此问题,请联系Raygun。
- 403:无效的API密钥。从Raygun应用设置说明或应用程序设置中复制API密钥。
版本号
您可以在实例化RaygunClient后通过调用SetVersion()
将PHP项目的版本号与消息一起传输 - 这不是必需的,但建议这样做,因为版本号被视为消息的一等数据。
$raygunClient = new RaygunClient($transport); $raygunClient->SetVersion('1.0.0.0');
添加标签
标签可以添加到错误数据中,以提供额外信息和帮助在Raygun中过滤错误。它们作为字符串或数字数组提供,作为SendError函数的第5个参数
或作为SendException函数的第2个参数
传递。
添加标签到每个有效载荷的异常和错误处理器的声明可能如下所示
<?php // ... $raygunClient = new RaygunClient($transport); $tags = ['staging-environment', 'machine-4']; set_error_handler(function($errno, $errstr, $errfile, $errline) use ($raygunClient, $tags) { $raygunClient->SendError($errno, $errstr, $errfile, $errline, $tags); }); set_exception_handler(function($exception) use ($raygunClient, $tags) { $raygunClient->SendException($exception, $tags); }); register_shutdown_function(function() use ($raygunClient, $tags) { $lastError = error_get_last(); if (!is_null($lastError)) { [$type, $message, $file, $line] = $lastError; $raygunClient->SendError($type, $message, $file, $line, $tags); } }); // ...
您可以通过以下方式手动发送已处理的异常并添加标签
try { // Do something questionable... } catch(Exception $exception) { $raygunClient->SendException($exception, ['handled-exception']); }
受影响用户跟踪
您可以通过传递以下数据(部分或全部)调用$raygunClient->SetUser
,这将用于提供受影响用户计数和报告
$raygunClient->SetUser($user = 'email_or_unique_identifier', $firstName = 'Example', $fullName = 'Example User', $emailAddress = 'test@example.com', $isAnonymous = false, $uuid = 'abc123');
$user
应是一个唯一标识符,用于识别您的用户。如果您将其设置为他们的电子邮件地址,请确保也设置了$email
参数。
如果出于隐私考虑希望禁用此功能,则此功能和值是可选的。要这样做,请将true
作为RaygunClient构造函数的第二个参数传递。
// Disable user tracking: $raygunClient = new RaygunClient($transport, true);
请注意,此数据存储为cookie。如果您没有调用SetUser,默认情况下将存储一个随机的UUID来表示用户。
此功能可以通过在会话开始时调用SetUser()
在CLI模式下使用。
自定义错误分组
通过向客户端的SetGroupingKey
方法传递回调,可以控制如何将错误实例分组在一起。如果回调返回一个字符串(理想情况下不超过100个字符),则匹配该键的错误将分组在一起,覆盖默认的自动分组。如果回调返回一个非字符串值,则该错误将自动分组。
$raygunClient->SetGroupingKey(function($payload, $stackTrace) { // Inspect the above parameters and return a hash from the properties ... return $payload->Details->Error->Message; // Naive message-based grouping only });
过滤敏感数据
某些错误数据可能过于敏感,无法发送到外部服务,例如信用卡详情或密码。由于此数据非常特定于应用程序,Raygun默认不进行过滤。您可以根据其键配置以替换或以其他方式转换特定值。这些转换适用于表单数据($_POST
)、自定义用户数据、HTTP头和环境数据($_SERVER
)。它不过滤URL或其$_GET
参数,或自定义消息字符串。由于Raygun不在堆栈跟踪中记录方法参数,因此不需要过滤。所有键比较均不区分大小写。
$raygunClient->setFilterParams([ 'password' => true, 'creditcardnumber' => true, 'ccv' => true, 'php_auth_pw' => true, // filters basic auth from $_SERVER ]); // Example input: ['Username' => 'myuser','Password' => 'secret'] // Example output: ['Username' => 'myuser','Password' => '[filtered]']
您还可以将键定义为正则表达式
$raygunClient->setFilterParams([ '/^credit/i' => true, ]); // Example input: ['CreditCardNumber' => '4111111111111111','CreditCardCcv' => '123'] // Example output: ['CreditCardNumber' => '[filtered]','CreditCardCcv' => '[filtered]']
如果您想保留有关数据的某些提示而不是完全删除它,您还可以通过PHP的匿名函数应用自定义转换。以下示例截断以"address"开头的所有键。
$raygunClient->setFilterParams([ 'Email' => function($key, $val) {return substr($val, 0, 5) . '...';} ]); // Example input: ['Email' => 'test@test.com'] // Example output: ['Email' => 'test@...']
如果您想确保无论字段名称如何都过滤掉所有表单提交数据,对于存在大量可能请求私人信息的表单的情况,您也可以这样做。字段名称将仍然传输,但值将被过滤掉。
$raygunClient->setFilterAllFormValues(true);
请注意,当定义任何过滤器时,Raygun错误将不再包含原始HTTP数据,因为没有有效的方法来过滤它。
更新Cookie选项
Cookies用于Raygun4PHP提供者用户跟踪功能。在提供者的1.8版本中,现在可以将传递给setcookie
方法的选项自定义到您的需求。
$raygunClient->SetCookieOptions([ 'expire' => 2592000, // 30 * 24 * 60 * 60 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false ]);
故障排除
如上所述,您可以为HTTP传输指定记录器
$transport->setLogger($logger);
这将记录在向Raygun传输数据时发生的异常。如果您继续遇到问题,请创建问题或联系我们。
命令行Posix环境中的400错误
如果在*nix操作系统上从命令行运行PHP脚本时,您收到一个'400 Bad Request'错误(在您的调试日志中),请检查您是否设置了任何LESS_TERMCAP
环境变量。这些变量与Raygun4PHP的当前版本不兼容。作为解决方案,在您的脚本运行之前取消设置这些变量,然后之后重新设置它们。
错误控制运算符(@)
如果您使用的是上述设置,则错误将发送到Raygun,无论是否有任何前面带有错误控制运算符(@符号)的行。要阻止这些错误发送到Raygun,您可以调用PHP的error_reporting方法,如果触发错误之前有@符号,该方法将返回0。
错误处理程序示例
function ($errno, $errstr, $errfile, $errline) use ($raygunClient) { if (error_reporting() !== 0) { $raygunClient->SendError($errno, $errstr, $errfile, $errline); } }
有关更多信息,请参阅PHP.net上的错误控制运算符部分。
变更日志
- 2.3.2:修复使用setcookie()不保存null值的问题
- 2.3.1:使用iconv从ISO-8859-1转换,而不是utf8_encode
- 2.3.0:支持psr/log的新版本
- 2.2.1:SetUser方法现在支持'用户'参数的数字数据类型
- 2.2.0:捕获异常本身抛出的文件和行号
- 2.1.1:修复在Uuid库中命名空间的问题,以防止与混合大小写包名称的composer错误
- 2.1.0:允许过滤客户端IP地址,添加配置以过滤所有POST表单数据
- 2.0.2:在Travis构建中移除PHP 7.2并替换为PHP 8.0,修复单元测试中的JSON匹配断言问题
- 2.0.1:修复CLI使用问题,RaygunMessage JSON编码中的PHP 7.4弃用警告
- 2.0.0:新主要版本
- 将最低PHP版本提高到7.1
- 添加PSR-4自动加载器
- 从RaygunClient类中删除
toJsonRemoveUnicodeSequences
和removeNullBytes
方法 - 使用toJson
代替
- 1.8.4:PHPUnit和配置更新,PHPDoc修复,以及从cookie中获取用户ID时的空指针异常修复
- 1.8.3:移除composer安装中的
--dev
选项,因为它已被弃用 - 1.8.2:当套接字连接失败时不再输出警告
- 1.8.1:修复使用escapeshellarg方法发送null字节时引发的错误
- 1.8.0:修复设置多个cookie的bug。可以通过setCookieOptions方法设置cookie选项
- 1.7.1:修复非法字符串偏移量问题
- 1.7.0:添加自定义错误分组
- 1.6.1:将ClassName分配为exceptionClass
- 1.6.0:添加HTTP代理支持,支持X-Forwarded-For,null服务器变量保护
- 1.5.3:统一属性大小写(内部更改)
- 1.5.2:防止当query_string不在$_SERVER中时出错
- 1.5.1:防止间歇性用户ID cookie为null;为禁用用户跟踪提供重载
- 1.5.0:添加增强的用户数据支持;修复1.4中可能出现的null backtrace frames
- 1.4.0:添加敏感数据过滤;改进错误回溯;启用Travis CI
- 1.3.6:将包含的Rhumsaa\Uuid库移动到此命名空间,以防止发生冲突
- 1.3.5:修复异步curl逻辑中的可能bug
- 1.3.4: 修复测试请求消息中的错误
- 1.3.3: 修复 v1.3.2 中脚本错误的紧急修复
- 1.3.2: 将之前版本的 UTF-8 编码程序更新为移除已废弃的 PHP 5.5 函数
- 1.3.1: 请求数据,特别是 $_SERVER 变量,现在已正确以 UTF-8 编码
- 1.3: 添加调试模式,在套接字模式下输出 HTTP 响应代码
- 1.2.6: 修复了上一个版本中渲染 UTC 偏移量修复无效的错误(感谢 @mrardon 发现此问题)
- 1.2.5: 将请求的 rawData(php://input)限制为 4096 字节,与其他提供商保持一致;将 UTC 偏移量限制在合理的值,因为 API 发现一些条目具有最大整型偏移量
- 1.2.4: 合并了单元测试
- 1.2.3: 修复了一个错误,其中 OccurredOn 未能以正确的 ISO 8601 表示形式出现
- 1.2.2: 些微的格式化重构
- 1.2.1: 修复了多个与用户跟踪和请求处理相关的错误
- 1.2: 添加了新的异步发送函数;移除了 cURL 依赖
- 1.1: 添加了用户跟踪支持;改进了 CLI 模式下的体验;添加了用户指定的时间戳支持;修复了用户数据编码错误
- 1.0: 初始提交