dotink/slashtrace

SlashTrace - 优秀的错误处理器

2.0-beta 2023-11-10 19:41 UTC

This package is auto-updated.

Last update: 2024-09-10 21:33:23 UTC


README

Build Status Code Coverage

Screenshot

SlashTrace 核心功能是错误和异常处理器。您可以将其连接到错误处理程序(或让它自动设置以捕获所有错误和异常),它会捕获并显示有关错误的大量信息。这适用于常规浏览器请求,也适用于AJAXCLIJSON APIs

完成本地调试后,您可以配置 SlashTrace 将错误发送到专门的错误报告服务,例如SentryRaygunBugsnag

用法

  1. 使用 Composer 安装

    composer require slashtrace/slashtrace
    
  2. 捕获错误

    use SlashTrace\SlashTrace;
    use SlashTrace\EventHandler\DebugHandler;
    
    $slashtrace = new SlashTrace();
    $slashtrace->addHandler(new DebugHandler());
    
    // Register the error and exception handlers
    $slashtrace->register();

    或者,您可以显式处理异常

    try {
        // Your code
    } catch (Exception $exception) {
        $slashtrace->handleException($exception);
    }

处理器

SlashTrace 随带 DebugHandler,用于上面的示例,但您通常希望将其设置为在生产环境中将错误发送到错误跟踪服务。目前,已实现以下提供程序的处理器,并将继续添加更多。点击每个链接查看使用文档

捕获额外数据

除了 SlashTrace 自带的复杂错误信息,您还可以将其他类型的数据附加到每个报告中。这在使用上面的外部处理器时特别有用。

这样,SlashTrace 就像您和这些提供程序之间的抽象层,将您提供的数据标准化为单一格式。这有助于您避免供应商锁定,并允许您通过更换处理器来简单地切换错误报告提供商。

捕获用户数据

如果您想附加有关受影响用户的信息,可以像这样操作

use SlashTrace\Context\User;

$user = new User();
$user->setId(12345); 
$user->setEmail('pfry@planetexpress.com');
$user->setName('Philip J. Fry');

$slashtrace->addUser($user);

请注意,用户至少需要一个 ID 或电子邮件。名称是完全可选的。

此功能对应于每个错误跟踪器中的相应实现

记录面包屑

有时,堆栈跟踪不足以了解导致错误的具体步骤。为此,SlashTrace 允许您在执行期间记录面包屑

$slashtrace->recordBreadcrumb("Router loaded");
$slashtrace->recordBreadcrumb("Matched route", [
    "controller" => "orders",
    "action" => "confirm",
]);

相关跟踪器文档

跟踪版本

通常,了解哪个版本引入了特定的错误或哪个版本触发了回归非常有用。使用特定的版本或版本号标记事件非常简单

$slashtrace->setRelease("1.0.0"); // <- Your version number, commit hash, etc.

跟踪器文档

调试渲染器

当您使用捆绑的调试处理器时,它会根据运行的环境尝试选择合适的输出渲染器,如下所示

  • CLI 渲染器php_sapi_name() === "cli示例输出
  • 纯文本渲染器,用于AJAX请求(带有X-Requested-With: XMLHttpRequest头部的请求)。示例输出
  • JSON渲染器,用于带有Accept: application/json头部的请求。如果两个头部都存在,它将优先于文本渲染器。示例输出
  • Web渲染器,用于所有其他请求。示例输出

或者,您可以强制调试处理器使用特定的渲染器

use SlashTrace\EventHandler\DebugHandler;
use SlashTrace\DebugRenderer\DebugJsonRenderer;

$handler = new DebugHandler();
$handler->setRenderer(new DebugJsonRenderer());

$slashtrace->addHandler($handler);