spatie/backtrace

更好的回溯

资助包维护!
spatie
其他

安装次数: 94,952,555

依赖者: 33

建议者: 0

安全: 0

星标: 340

关注者: 8

分支: 23

1.6.2 2024-07-22 08:21 UTC

This package is auto-updated.

Last update: 2024-09-22 08:42:49 UTC


README

Latest Version on Packagist Tests Total Downloads

要在PHP中获取回溯,您可以使用 debug_backtrace 函数。默认情况下,这可能很难处理。报告的框架函数名有偏差:它属于上一个框架。此外,需要使用位掩码传递选项。

此包提供了一种比 debug_backtrace 更好的方法来处理回溯。以下是一个示例

// returns an array with `Spatie\Backtrace\Frame` instances
$frames = Spatie\Backtrace\Backtrace::create()->frames(); 

$firstFrame = $frames[0];

$firstFrame->file; // returns the file name
$firstFrame->lineNumber; // returns the line number
$firstFrame->class; // returns the class name

支持我们

我们在创建一流的开放源代码包上投入了大量资源。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄给我们明信片,注明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们在我们的虚拟明信片墙上发布所有收到的明信片。

安装

您可以通过composer安装此包

composer require spatie/backtrace

用法

这样您就可以创建一个回溯实例

$backtrace = Spatie\Backtrace\Backtrace::create();

获取框架

要获取所有框架,您可以调用 frames

$frames = $backtrace->frames(); // contains an array with `Spatie\Backtrace\Frame` instances

Spatie\Backtrace\Frame 具有以下属性

  • file:文件的名称
  • lineNumber:行号
  • arguments:用于此框架的参数。如果未使用 withArguments,则为 null
  • class:此框架的类名。如果框架涉及函数,则为 null
  • method:在此框架中使用的函数
  • applicationFrame:如果此框架属于您的应用程序,则包含 true,如果属于供应商目录中的文件,则包含 false

收集参数

出于性能原因,回溯的框架将不会包含被调用函数的参数。如果要将这些参数添加进去,请使用 withArguments 方法。

$backtrace = Spatie\Backtrace\Backtrace::create()->withArguments();

减少参数

为了查看目的,参数可以减少为字符串

$backtrace = Spatie\Backtrace\Backtrace::create()->withArguments()->reduceArguments();

默认情况下,一些典型类型将减少为字符串。您可以通过实现一个 ArgumentReducer 来为每种类型定义自己的减少算法

class DateTimeWithOtherFormatArgumentReducer implements ArgumentReducer
{
    public function execute($argument): ReducedArgumentContract
    {
        if (! $argument instanceof DateTimeInterface) {
            return UnReducedArgument::create();
        }

        return new ReducedArgument(
            $argument->format('d/m/y H:i'),
            get_class($argument),
        );
    }
}

这是内置参数减少器的副本,用于 DateTimeInterface,我们已更新了格式。当参数不是预期类型时,返回 UnReducedArgument 对象。返回带有参数减少值和参数原始类型的 ReducedArgument 对象。

减少器可以这样使用

$backtrace = Spatie\Backtrace\Backtrace::create()->withArguments()->reduceArguments(
    Spatie\Backtrace\Arguments\ArgumentReducers::default([
        new DateTimeWithOtherFormatArgumentReducer()
    ])
);

这将首先执行新的减少器,然后是默认的减少器。

设置应用程序路径

您可以使用 applicationPath 来传递应用程序的基本路径。此值将用于确定框架是应用程序框架还是供应商框架。以下是一个使用Laravel特定函数的示例。

$backtrace = Spatie\Backtrace\Backtrace::create()->applicationPath(base_path());

获取跟踪的某个部分

如果您只想获取从回溯中的特定框架开始的框架,可以使用 startingFromFrame 方法

use Spatie\Backtrace\Backtrace;
use Spatie\Backtrace\Frame;

$frames = Backtrace::create()
    ->startingFromFrame(function (Frame $frame) {
        return $frame->class === MyClass::class;
    })
    ->frames();

使用此代码,将过滤掉涉及 MyClass 的框架之前的所有框架。

或者,您可以使用offset方法,这将跳过指定的帧数。在这个例子中,前两帧不会出现在$frames中。

$frames = Spatie\Backtrace\Backtrace::create()
    ->offset(2)
    ->frames();

限制帧数

要获取特定数量的帧,请使用limit函数。在这个例子中,我们只会获取前两帧。

$frames = Spatie\Backtrace\Backtrace::create()
    ->limit(2)
    ->frames();

获取可抛出的堆栈跟踪

以下是获取可抛出堆栈跟踪的方法。

$frames = Spatie\Backtrace\Backtrace::createForThrowable($throwable)

因为我们将使用可抛出中已存在的堆栈跟踪,所以帧将始终包含使用的参数。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞,请参阅我们的安全策略

鸣谢

许可协议

MIT许可协议(MIT)。有关更多信息,请参阅许可文件