.NET Maui应用仅向Sentry上报致命异常配置问题求助
问题原因及解决方案
核心问题
你遇到的问题根源有三个:
- 手动捕获异常的默认级别不是Fatal:通过
CaptureException捕获的异常,默认级别是Error而非Fatal,所以你的SetBeforeSend逻辑会把这些异常全部过滤,导致无上报。 ConfigureScope使用方式错误:单独调用ConfigureScope仅修改当前线程的全局作用域,若后续CaptureException不在同一上下文(比如异步场景),设置的级别不会生效。- 混淆了
DiagnosticLevel的作用:options.DiagnosticLevel = SentryLevel.Fatal是控制Sentry SDK自身的日志输出级别(仅打印SDK内部致命日志),和上报事件的级别过滤无关,这个设置对你的需求没有帮助。
解决方案
1. 正确设置手动捕获异常的级别
用WithScope包裹捕获逻辑,创建临时作用域确保级别仅作用于当前事件:
SentrySdk.WithScope(scope => { scope.Level = SentryLevel.Fatal; SentrySdk.CaptureException(ex); });
2. 保留原有SetBeforeSend逻辑
你的SetBeforeSend过滤逻辑本身是正确的,配合上面的WithScope使用,即可实现仅上报标记为Fatal的手动异常,以及Sentry自动捕获的崩溃级异常(默认级别为Fatal)。
3. 确认自动崩溃捕获生效
MAUI中Sentry默认会自动捕获未处理的致命异常(如AppDomain未处理异常、未观察到的Task异常),这些异常级别默认是Fatal,会被你的过滤逻辑保留上报。你已开启IsGlobalModeEnabled = true,这部分无需额外调整。
验证方法
- 手动抛出异常并通过上述代码捕获上报,查看Sentry后台是否收到事件;
- 触发未处理的崩溃(比如在按钮点击事件中直接抛出未捕获异常),确认崩溃事件能正常上报。
内容的提问来源于stack exchange,提问作者Anders
相关产品推荐
相关产品推荐

