rammewerk / error-handler
用于管理和标准化PHP错误的简单类
v1.1.1
2023-11-24 13:49 UTC
Requires
- php: >=8.2
README
一种简单灵活的方法来处理和管理工作中的PHP应用程序中的错误和异常。
- PHP错误默认会被转换为异常。
- 您可以注册多个闭包来处理错误。
- 无其他依赖 - 小巧 - 仅1个文件。
安装
$ composer require rammewerk/error-handler
使用
错误处理器应在您的应用程序早期注册,以确保捕获可能从开始就出现的问题。如果注册较晚,初始错误可能无法捕获。早期注册还有助于结构化错误管理,便于调试和维护。
use Rammewerk\Component\ErrorHandler; $errorHandling = new ErrorHandler(); $errorHandling->log( static function (\Throwable $e) { # Log your exceptions }); $errorHandling->report( static function (\Throwable $e) { # Show the exception to your user. });
log和report之间基本上没有区别。首先调用日志闭包,然后调用报告。因此,您可以在稍后添加不同的log处理程序,即使之前注册的report闭包可能用于退出PHP。
log闭包的调用顺序与注册顺序相同。reports的调用顺序相反。因此,您可以在应用程序的早期添加一条通用消息,然后在稍后添加新的报告来处理不同的场景,处理程序会调用“通用”错误报告。
为什么使用Rammewerk ErrorHandler?
PHP要么抛出异常(这些异常旨在被捕获),要么打印错误(这些错误通常无法恢复)。但不必同时处理异常和错误,我们将错误转换为异常,这样您就只需处理异常。不再需要@file_get_contents,只需简洁的try/catch。
未捕获的异常将被传递给您的log和report闭包。
许多其他框架或库都更加先进,并带有大量功能。这个ErrorHandler设计简单 - 您决定如何处理未捕获的异常和错误。
提示
- 尽早将ErrorHandler类添加到您的应用程序中。
- 在任何您想添加
log和report闭包的地方添加它们。只有当异常在注册的闭包之后发生时,ErrorHandler才会调用这些闭包。因此,尽早添加log和report闭包。 - 您可以为多个
log和report闭包。首先调用log,然后调用report闭包。 - 如果您想删除之前注册的闭包 - 在
log或report中将第二个参数设置为true。例如:$error->log( $closure, true )。如果要在稍后的脚本中替换调用其他依赖项之后的日志,这可能会很有用。
示例
use Rammewerk\Component\ErrorHandler; CONST DEBUG_MODE = true; $errorHandler = new ErrorHandler(); /** Log latest exception to JSON file */ $errorHandler->log( static function (\Throwable $e) { file_put_contents( 'latest_error.json', json_encode($e->getMessage()) ); }); /** Show default 500 error page */ $errorHandler->report( static function () { http_response_code( 500 ); echo file_get_contents( "errors/500.html" ); die; } ); /** * Show error details if DEBUG_MODE. * Second argument here (true) is used to reset the report list. * report closures */ if( DEBUG_MODE ) { $errorHandler->report( function (\Throwable $e) { $debug = new \CustomDebugClass(); $debug->exception($e); die; }, true); }
处理不同类型的异常
report和log闭包处理任何Throwable异常。为了区分异常类型,在闭包中包含一个instanceOf检查。
$errorHandling->report( function (\Throwable $e) { if( $e instanceof \MyCustomException) ) { die('MyCustomException was thrown'); } } );