jasny / error-handler
支持 PSR-7 的错误处理器
Requires
- php: >=5.6.0
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- jasny/http-message: ^1.3
- jasny/php-code-quality: ^2.0
This package is auto-updated.
Last update: 2019-12-02 14:17:59 UTC
README
支持 PSR-7 的错误处理器。
安装
Jasny 错误处理器包可在 packagist 上找到。使用 composer 安装。
composer require jasny/error-handler
用法
$errorHandler = new Jasny\ErrorHandler();
仅创建错误处理器不会做任何事情。您可以使用它进行日志记录、处理致命错误以及作为 PSR-7 兼容的中件间。
日志记录
默认情况下,错误处理器仅捕获 抛出异常 并不设置 PHP 错误处理器。
要记录错误,请使用 setLogger()
设置记录器。您可以使用任何 PSR-3 兼容的记录器,如 Monolog。
logUncaught()
方法将设置错误处理器,以便可以记录警告和通知。它还可能 注册一个关闭函数 来处理不可捕获的致命错误。
use Monolog\Logger; use Monolog\Handler\StreamHandler; $errorHandler = new Jasny\ErrorHandler(); $log = new Logger('test'); $log->pushHandler(new StreamHandler('path/to/your.log')); // Log fatal errors, warnings and uncaught exceptions $errorHandler->setLogger($log); $errorHandler->logUncaught(E_PARSE | E_ERROR | E_WARNING | E_USER_WARNING); $errorHandler->logUncaught(Exception::class); $errorHandler->logUncaught(Error::class); // PHP7 only
PSR-7 兼容的中件间
错误处理器可以用作 PSR-7 兼容(双遍)中件间。
您可以使用此中件间与以下软件一起使用:
例如,与 Relay 一起使用
use Relay\RelayBuilder; use Jasny\HttpMessage\ServerRequest; use Jasny\HttpMessage\Response; $errorHandler = new Jasny\ErrorHandler(); $relay = new RelayBuilder(); $dispatcher = $relay->newInstance([$errorHandler->asMiddleware()]); $response = $dispatcher((new ServerRequest())->withGlobalEnvironment(), new Response());
或与 Jasny Router 一起使用
use Jasny\Router; use Jasny\Router\Routes\Glob as Routes; use Jasny\HttpMessage\ServerRequest; use Jasny\HttpMessage\Response; $router = new Router(new Routes(['/**' => ['controller' => '$1', 'id' => '$2'])); $errorHandler = new Jasny\ErrorHandler(); $router->add($errorHandler->asMiddleware()); $response = $dispatcher((new ServerRequest())->withGlobalEnvironment(), new Response());
PHP 5 支持
在 PHP 5 中,错误不会抛出,因此中件间不会处理它。要为 PHP5 中的错误添加中件间支持,您应该调用 converErrorsToExceptions()
。此方法将错误转换为 ErrorException。
处理致命错误
未抛出的错误,如语法错误,不会被捕获,并会导致致命错误。使用 logUncaught()
方法,您可以指定错误处理器还应捕获这类错误。
使用 onFatalError()
方法,您可以采取额外操作,如输出漂亮的错误信息。
ob_start(); $errorHandler = new Jasny\ErrorHandler(); $errorHandler->logUncaught(E_ERROR | E_RECOVERABLE_ERROR | E_USER_ERROR); $errorHandler->onFatalError(function() { http_response_code(500); header('Content-Type: text/html'); echo "<h1>An unexpected error occured</h1><p>The error has been logged.</p>"; }, true);
将 true
作为 onFatalError
的第二个参数,在调用您的函数之前输出缓冲区。
与其他错误处理器结合使用
使用错误记录器可能会丢失其他错误处理器可以获取的回溯信息。Jasny 错误处理器将始终调用先前的错误处理器,包括 PHP 内置的错误处理器。
当使用 Rollbar 时,您不应使用 Rollbar 的 Monolog 处理器。通过使用 Rollbar 自身的错误处理器,您将获得更好的错误报告。
use Jasny\ErrorHandler; use Monolog\Logger; use Monolog\Handler\StreamHandler; // Rollbar error handler will log uncaught errors Rollbar::init(array('access_token' => 'POST_SERVER_ITEM_ACCESS_TOKEN')); $log = new Logger('test'); $log->pushHandler(new RollbarHandler(Rollbar::$instance)); $errorHandler = new ErrorHandler(); // Jasny error handler will only log caught errors $errorHandler->setLogger($log);