面包屑

了解 Sentry 如何创建问题发生前的事件轨迹(面包屑)。

Sentry 使用 面包屑 来创建问题发生前的事件轨迹。这些事件非常类似于传统日志,但可以记录更丰富的结构化数据。

本页面提供了手动记录和自定义面包屑的概述。了解更多关于在 问题详情 页面上显示的信息以及如何过滤面包屑以快速解决问题,请参阅 使用面包屑

您可以在任何时候手动添加面包屑,以记录有趣的事情。例如,当用户进行身份验证或发生其他状态变化时,您可以手动记录面包屑。

手动记录面包屑:

Copied
\Sentry\addBreadcrumb(
    category: 'auth',
    message: 'User authenticated', // optional
    metadata: ['user_id' => $userId], // optional
    level: Breadcrumb::LEVEL_INFO, // set by default
    type: Breadcrumb::TYPE_DEFAULT, // set by default
);

可用的面包屑键包括 typecategorymessageleveltimestamp(许多 SDK 会自动为您设置)和 datadata 是放置任何您希望面包屑包含的额外信息的地方。使用这六个键之外的键不会导致错误,但在 Sentry 处理事件时这些数据将被丢弃。

SDK 和其关联的集成会自动记录许多类型的面包屑。例如,浏览器 JavaScript SDK 会自动记录 DOM 元素上的点击和按键事件、XHR/fetch 请求、控制台 API 调用以及所有位置变化。

SDK 允许您通过 before_breadcrumb 钩子自定义面包屑。

此钩子传递一个已经组装好的面包屑,并在某些 SDK 中传递一个可选的提示。该函数可以修改面包屑或通过返回 null 来决定完全丢弃它:

config/packages/sentry.yaml
Copied
sentry:
  options:
    before_breadcrumb: "sentry.callback.before_breadcrumb"

services:
  sentry.callback.before_breadcrumb:
    class: 'App\Service\Sentry'
    factory: ['@App\Service\Sentry', "getBeforeBreadcrumb"]

The service needed for the before_breadcrumb option can be implemented as follows:

src/Service/Sentry.php
Copied
<?php

namespace App\Service;

class Sentry
{
    public function getBeforeBreadcrumb(): callable
    {
        return function(\Sentry\Breadcrumb $breadcrumb): ?\Sentry\Breadcrumb {
            return $breadcrumb;
        };
    }
}

有关提示可以做什么的更多信息,请参阅 过滤事件