You need to enable JavaScript to run this app. 如何向Sentry上报自定义Go错误类型以显示自定义类型名而非底层类型
优惠活动
大模型
产品
解决方案
定价
更多

如何向Sentry上报自定义Go错误类型以显示自定义类型名而非底层类型

问题原因

你当前的写法是将operationTimeoutError声明为error接口的衍生类型,实际赋值的errOperationTimeout底层是标准库的*errors.errorString结构体,Sentry采集错误类型时默认读取错误的底层具体实现类型,因此只会显示errorString而不会显示你自定义的类型名。

你当前的上报效果参考:
Sentry错误展示截图

解决方案

方案1:自定义结构体实现error接口(最推荐)

这是Go官方推荐的自定义错误实现方式,既可以让Sentry正确识别类型,也兼容errors.As等标准库错误处理能力,代码示例如下:

import (
	"errors"
	"github.com/getsentry/sentry-go"
)

// 自定义错误结构体,类型名会被Sentry识别
type operationTimeoutError struct {
	message string
}

// 实现error接口必须的Error方法
func (e *operationTimeoutError) Error() string {
	return e.message
}

// 初始化全局超时错误实例
var ErrOperationTimeout error = &operationTimeoutError{message: "TIMEOUT"}

func foo() {
	// 上报后Sentry会显示错误类型为 *operationTimeoutError
	sentry.CaptureException(ErrOperationTimeout)
}

方案2:无需修改错误定义的临时适配方案

如果你暂时不想调整现有错误定义,也可以通过Sentry的事件回调强制修改错误类型展示:

func foo() {
	sentry.CaptureException(errOperationTimeout, func(event *sentry.Event) {
		// 强制修改第一个异常的类型名为自定义名称
		if len(event.Exception) > 0 {
			event.Exception[0].Type = "operationTimeoutError"
		}
	})
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:15:00