exbico/monolog-exception-processor

异常及带上下文异常的Monolog处理器

2.0.0 2023-06-09 12:31 UTC

This package is auto-updated.

Last update: 2024-09-09 14:56:43 UTC


README

Latest Stable Version Total Downloads License

安装

安装此扩展的首选方式是通过 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" => "...",
      ],
    ],
    ...
  ],
]

警告:如果两个上下文中都有相同的键,则异常上下文的值具有更高的优先级