exbico / monolog-exception-processor
异常及带上下文异常的Monolog处理器
2.0.0
2023-06-09 12:31 UTC
Requires
- php: ^8.1
- monolog/monolog: ^3.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- squizlabs/php_codesniffer: ^3.7
README
安装
安装此扩展的首选方式是通过 Composer。
运行以下命令之一
composer require exbico/monolog-exception-processor
或者
"exbico/monolog-exception-processor": "*"
将以下内容添加到应用程序的 composer.json
文件的require部分。
基本用法
<?php use Exbico\Formatter\ExceptionProcessor; use Monolog\Logger; $logger = new Logger(); $logger->pushProcessor(new ExceptionProcessor);
用法
<?php try{ throw new Exception('test'); }catch(Throwable $exception) { $logger->alert('message', [..., 'exception' => $exception, ...]); }
任何可抛出异常的结果记录
[
"message" => "message",
"context" => [...],
...
"extra" => [
...
"exception" => [
"message" => "test",
"class" => "Exception",
"trace" => "#0 {main}",
],
...
],
]
如果可抛出异常有之前的记录,则结果记录
[
"message" => "message",
"context" => [...],
...
"extra" => [
...
"exception" => [
"message" => "test",
"class" => "Exception",
"trace" =>"#0 {main}",
"previous" => [
"message" => "previous message",
"class" => "Class of previous",
"trace" => "#0 {main}",
],
],
...
],
]
您可以实现ExceptionWithContext或扩展ContextException
<?php use Exbico\Formatter\ExceptionWithContext; use Exbico\Formatter\ExceptionWithContextInterface; class FooException extends ExceptionWithContext { } class BarException implements ExceptionWithContextInterface { ... /** * @return array<string, mixed> */ public function getContext(): array { ... } } try { throw new FooException(message: 'test', context: ['id' => 12, 'text' => '...'], previous: $previousException); } catch (FooException $exception) { $logger->alert('message', ['id' => 34, 'exception' => $exception, 'date' => '...']); }
然后记录将看起来像这样
[
"message" => "message",
"context" => [
"id" => 34,
"date" => "...",
"text" => "...",
],
...
"extra" => [
...
"exception" => [
"message" => "test",
"class" => "Exception",
"trace" =>"#0 {main}",
"previous" => [
"message" => "previous message",
"class" => "Class of previous",
"trace" => "#0 {main}",
"context" => [
...
],
],
"context" => [
"id" => 34,
"date" => "...",
],
],
...
],
]
警告:如果两个上下文中都有相同的键,则异常上下文的值具有更高的优先级