获取更多动态,关注公众号:黑客下午茶

Add Context

自定义上下文允许您将任意数据附加到事件。通常,此上下文在其生命周期中捕获的任何 issue 之间都是共享的。您无法搜索这些,但可以在 issue 页面上查看它们:

Custom contexts as viewed on the Additional Data section of an event

Structured Context

附加自定义 data 的最佳实践是通过结构化上下文。上下文必须始终是一个 dictionary 或 map,它的值可以是任意的。使用setContext 并给 context 一个唯一的名称:

Copied
Sentry.setContext("character", {
  name: "Mighty Fighter",
  age: 19,
  attack_type: "melee",
});

命名上下文或其字段没有任何限制。但是,对于通用上下文有一组约定。有关更多信息,请参阅 contexts interface developer documentation

Size Limitations

发送上下文时,请考虑有效负载大小限制。 Sentry 不建议在上下文中发送整个应用程序状态和大数据 blob。如果超过最大有效负载大小,Sentry 将响应 413 Payload Too Large,并拒绝该事件。使用 keepalive: true 时,该请求可能会永远保持待处理状态。

Sentry SDK 将尽最大努力容纳您发送的数据并修剪大型上下文有效负载或将其完全截断。有关更多详细信息,请参阅 developer documentation on SDK data handling

Passing Context Directly

从我们的 JavaScript SDK 5.16.0 版本开始,可以将某些上下文数据直接提供给 captureExceptioncaptureMessage 调用。提供的数据将与当前范围内已经存储的数据合并,除非使用回调方法明确将其清除。

此功能有三种不同的变体形式:

  1. 包含可更新属性的普通对象
  2. 我们将从中提取属性的 Scope 实例
  3. 回调函数,它将接收当前 scope 作为参数并允许修改

我们允许传递以下上下文 keys:tags, extra, contexts, user, level, fingerprint

Example Usages

Copied
Sentry.captureException(new Error("something went wrong"), {
  tags: {
    section: "articles",
  },
});

显式清除已经存储在 scope 中的内容:

Copied
Sentry.captureException(new Error("clean as never"), scope => {
  scope.clear();
  scope.setTag("clean", "slate");
  return scope;
});

使用 Scope 实例传递数据(其属性仍将与全局 scope 合并):

Copied
const scope = new Sentry.Scope();
scope.setTag("section", "articles");
Sentry.captureException(new Error("something went wrong"), scope);

使用 Scope 实例传递数据并忽略全局配置的 Scope 属性:

Copied
const scope = new Sentry.Scope();
scope.setTag("section", "articles");
Sentry.captureException(new Error("something went wrong"), () => scope);

Clearing Context

Context 保留在当前 scope 内,因此在每个操作(请求等)结束时将其清除。您还可以 push 和 pop 自己的作用域,以将上下文数据应用于特定的代码块或函数。

Sentry 支持两种不同的 scope 来设置上下文:

  1. global scope,Sentry 在操作结束时不会丢弃
  2. 用户创建的 scope

这将在以后的所有事件中更改:

Copied
Sentry.setUser(someUser);

仅针对在 withScope 回调中捕获的错误,将更改此状态,然后自动将其恢复为先前的值:

Copied
Sentry.withScope(function(scope) {
  scope.setUser(someUser);
  Sentry.captureException(error);
});

如果你想从作用域中(Scope)删除全局配置的数据,你可以调用:

Copied
Sentry.configureScope(scope => scope.clear());

要了解有关设置 Scope 的更多信息,请参阅我们关于 Scopes and Hubs 的文档。

Additional Data

除了结构化上下文(structured contexts),Sentry 还支持通过 setExtra 添加非结构化 "Additional Data"。Additional Data 已经废弃,而应使用结构化上下文,并应尽可能避免使用。

You can edit this page on GitHub.