You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js中为Sentry上报的所有错误添加error.digest标签?

解决Sentry beforeSend中无法获取error.digest的问题

问题根源

error.digest并非原生Error对象或Sentry捕获的异常实例自带的属性,你尝试通过scope.setTag设置的error.digest本身就不存在,这是核心问题;同时Sentry的事件digest生成时机晚于beforeSend钩子的执行时机,导致该阶段无法直接获取。

可行解决方案

  • 使用事件处理器获取官方digest
    事件处理器(Event Processor)的执行时机晚于beforeSend,此时Sentry已经生成了事件的digest,可在此阶段给事件添加标签:

    // sentry.server.config.ts
    import * as Sentry from '@sentry/node';
    
    Sentry.init({
      dsn: '你的DSN',
      // 其他基础配置
      async init() {
        Sentry.getCurrentScope().addEventProcessor(async (event) => {
          if (event.digest) {
            // 为事件添加digest标签
            event.tags = { ...event.tags, digest: event.digest };
          }
          return event;
        });
      },
    });
    
  • 手动生成自定义错误digest
    如果不需要依赖Sentry官方生成的digest,可在捕获错误时基于错误信息手动计算哈希值作为digest:

    import * as Sentry from '@sentry/node';
    import { createHash } from 'crypto'; // Node.js环境
    
    // 封装捕获错误的方法
    export function captureError(error: Error) {
      // 基于错误名称、消息、堆栈生成哈希值
      const errorContent = `${error.name}: ${error.message}\n${error.stack || ''}`;
      const customDigest = createHash('sha256').update(errorContent).digest('hex');
    
      Sentry.withScope(scope => {
        scope.setTag('digest', customDigest);
        Sentry.captureException(error);
      });
    }
    
  • 升级Sentry SDK版本
    若使用的@sentry/node版本较旧,可能存在digest生成时机滞后的问题,升级到最新稳定版后,部分场景下可在beforeSend中直接访问event.digest:

    npm update @sentry/node
    

补充说明

你之前尝试的hint.originalException.digest和hint.syntheticException.digest返回undefined是正常现象——Sentry不会给捕获到的异常实例自动添加digest属性,digest是属于Sentry事件(Event)层级的属性,而非单个异常对象。

内容的提问来源于stack exchange,提问作者A.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:10:17