fab2s/context-exception

上下文异常接口和实现

3.0.0 2023-01-04 07:45 UTC

This package is auto-updated.

Last update: 2024-09-04 11:27:27 UTC


README

CI QA Total Downloads Monthly Downloads Latest Stable Version Code Climate Scrutinizer Code Quality PRs Welcome License

异常日志对于监控应用故障非常有用,但就目前而言,无法提供有助于处理这些异常日志的上下文数据。

这个异常接口和实现只是向提供异常上下文迈出的一步,允许您与这些异常交互,并将它们与您提供的额外信息一起记录。

它与Monolog和全局异常处理结合得很好,您可以直接在全局范围内将异常上下文添加到日志(当可用时),这可能几乎可以是任何性质(Monolog有很多处理器,您可以添加更多以满足您的需求)。

在您的异常处理器(或只是一个try{}catch{})中

if ($exception instanceof ContextExceptionInterface) {
    $context = $exception->getContext();
    // now you can add this data to your monolog's context
}

设置上下文可以通过几种方式实现

// arguable way
throw (new ContextException('Message'))->setContext($contextData);

// or more conventional
throw new ContextException('Message', 0, null, $contextData);

// or step by step (also arguable)
$exception = new ContextException;
$exception->setContext($contextData);
throw $exception;

在我看来,某些提供异常上下文的方式的可辩性与其在现实生活中的实用性不匹配。我并不是说应该原则上首选传统的抛出方式,但我确实发现现实生活中的使用,比如

} catch (ContextException $e) {
    // access context
    $context = $e->getContext();
    // set context in case there is none
    $e->setContext($context);
}

然后,您就获得了可变性,所以...

安装

可以使用composer安装ContextException

composer require "fab2s/context-exception"

V3.x在ContextExceptionInterface中引入了破坏性更改,不再包含构造函数或合并函数的签名。它引入了一个方便的ContextExceptionTrait,您可以使用它来实现自己的ContextExceptionInterface实现,而无需继承ContextException

如果您想坚持使用之前的接口

composer require "fab2s/context-exception" ^2

如果您想特别安装php >=7.1.0版本,请使用

composer require "fab2s/context-exception" ^1

如果您想特别安装php 5.6/7.0版本,请使用

composer require "fab2s/context-exception" ^0

要求

ContextException已针对php 7.1、7.2、7.3、7.4、8.0、8.1和8.2进行测试

许可证

ContextException是开源软件,根据MIT许可证授权。