脚本宝典收集整理的这篇文章主要介绍了PHP中日志自定义异常的最佳实践,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
try{ //some exception occur } catch(customeException $e) { $LOG->logException($e); $e->showMessage(); // or do anything that we have to do wITh the error. }
因为我们记录了所有的customExceptions,我能想到的另一种方式是,更新customException构造函数并在构造函数中记录异常.这样,它确保记录所有customException.但是,如果我们走这条道路,我的问题是:
>如何将记录器注入customException?
>这会违反SRP原则吗?
>是否会考虑OOP意义上的不良做法或者最佳做法是什么?
我建议你将Exception与ExceptionHandler分开.异常类应该只包含“什么(和哪里)出错”的信息. ExceptionHandler负责记录异常(如果需要,还可以执行其他一些异常工作).
因此,您可以设置一个全局ExceptionHandler(使用set_exception_handler和set_error_handler或一些基于框架的异常处理机制,如symfony’s ExceptionListener),它将捕获所有未处理的异常.
<?PHP class ExceptionHandler { /** * @VAR Logger */ PRivate $logger; public function __construct(Logger $logger) { $this->logger = $logger; } public function handle(Throwable $e) { $this->logger->logException($e); } }
在应用程序代码中,您仍然可以抛出并捕获异常.我认为有4种常见情况.
完全可恢复的例外情况
这是处理可恢复异常的一般方法 – 这种情况当您根本不想失败时,但是当发生此类异常时您需要执行某些操作.
<?PHP try { $methodThatThrowsException(); } catch (DoesNotMatterException $e) { // do some stuff and continue the execution // note,that this exception won't be logged }
可恢复的记录异常
与以前相同,但您要记录此异常.
<?PHP try { $methodThatThrowsException(); } catch (NonCriticalExceptionThatShouldBeLogged $e) { $this->exceptionHandler->handle($e); // log exception // do some stuff and continue the execution }
带有“终结器”的不可恢复的异常
您想要执行某些特定的业务逻辑然后失败.您可以捕获异常,处理它然后再次抛出它.全局异常处理程序将处理此异常并将其记录下来.
<?PHP try { $methodThatThrowsException(); } catch (CriticalException $e) { // do some stuff like cleanup/transaction rollback throw $e; }
不可恢复的例外情况
如果您只想记录异常并失败,您可以抛出此异常,全局异常处理程序将捕获并记录它.
<?PHP $methodThatThrowsException(); // ExceptionHandler::handle will be executed
以上是脚本宝典为你收集整理的PHP中日志自定义异常的最佳实践全部内容,希望文章能够帮你解决PHP中日志自定义异常的最佳实践所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。