joségonzalez / php-error-handlers
PHP 库,包含对流行错误处理服务的包装器
Requires
- php: >=7.0
- airbrake/phpbrake: ~0.3.0
- bugsnag/bugsnag: ~3.0
- mindscape/raygun4php: ^1.6
- monolog/monolog: ^1.17
- sentry/sentry: ^1.7.0
Requires (Dev)
- cakephp/cakephp: ~3.0
- cakephp/cakephp-codesniffer: dev-master
- phpunit/phpunit: ~6.0
- satooshi/php-coveralls: dev-master
README
错误处理器
一个包含对流行错误处理服务包装器的包。
包含 CakePHP 3 的集成库。
要求
- PHP 5.5+
- 耐心
安装
# install it
composer require josegonzalez/php-error-handlers
用法
您可以将 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
) airbrake api 主机,例如:'api.airbrake.io' 或 'http://errbit.example.com'projectId
: (必需 | 默认:null
)projectKey
: (必需 | 默认:null
)appVersion
: (可选 | 默认:null
)environment
: (可选 | 默认:null
)rootDirectory
: (可选 | 默认:null
)httpClient
: (可选 | 默认:null
) 使用哪个 HTTP 客户端:"default", "curl", "guzzle" 或客户端实例
AtatusHandler
: 使用atatus
php 扩展。apiKey
: (可选 | 默认:null
)
BugsnagHandler
: 使用官方的 bugsnag php 包。apiKey
: (必需 | 默认:null
)defaults
: (可选 | 默认:null
) 企业用户的 bugsnag 端点endpoint
: (可选 | 默认:true
) 如果我们应该注册默认的回调
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 php 包。dsn
: (必需 | 默认:null
)callInstall
: (可选 | 默认:false
) 是否调用客户端的install
方法。
处理器和异常修改
修改客户端处理器
有时您可能会发现修改客户端很有用。例如,可能需要向给定的客户端调用添加上下文信息。要这样做,您可以设置 clientCallback
配置键
$config = [ 'handlers' => [ 'BugsnagHandler' => [ 'clientCallback' => function ($client) { // do something interesting to the client $client->setAppVersion('1.0.0'); return $client; }, ], ], ];
请注意,客户端仍然应该响应上游库提供的现有报告 API。如果您想的话,可以返回代理库,但返回初始客户端是理想的。
如果处理器配置不当,则
$client
可能会在clientCallback
内部设置为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);
- 在发送到
handle
方法之前,PHP 5.x错误将被替换为包装的ErrorException
实例。 - 在发送到
handle
方法之前,PHP 7.x错误将替换为包装的Josegonzalez\ErrorHandlers\Exception\PHP7ErrorException
实例。 - 在发送到
handle
方法之前,PHP致命错误将被替换为包装的Josegonzalez\ErrorHandlers\Exception\FatalErrorException
实例。 - PHP异常将保持不变发送。
自定义处理器应该扩展提供的Josegonzalez\ErrorHandlers\Handler\AbstractHandler
类。这使它们能够通过提供的ConfigTrait
和自定义的__construct()
接收配置。
CakePHP用法
加载库是不必要的,并且会导致错误。请按照以下说明进行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(); }