MAUI应用崩溃日志的处理和上报,核心在于捕获未处理异常 + 本地持久化 + 启动时自动上传。它不是“出错了才上报”,而是构建一套轻量、可靠、跨平台的日志兜底链路。
全局未处理异常捕获
这是第一道防线,覆盖UI线程、后台任务、平台原生回调抛出的所有托管异常:
在MauiProgram.cs中注册全局异常处理器(推荐单例服务) 订阅AppDomain.CurrentDomain.UnhandledException和
TaskScheduler.UnobservedTaskExceptionAndroid/iOS/Desktop需额外监听平台级异常:如iOS的
UIApplication.DidReceiveMemoryWarning、Android的
Application.Error事件 捕获后立即写入本地文件(建议用
FileSystem.AppDataDirectory),避免内存中丢失
崩溃日志本地存储规范
崩溃发生时,不能只存堆栈——要包含可复现的关键上下文:
时间戳(UTC)、设备型号、操作系统版本、.NET MAUI运行时版本 应用状态:当前页面、生命周期状态(Resumed/Paused)、是否前台 异常类型、Message、完整StackTrace(含内联帧)、InnerException链 可选但强烈建议:最近3条用户操作日志(如按钮点击、页面跳转)——需配合自定义事件追踪器 文件命名建议:crash_20251215_120345.json,便于排序与清理
启动时自动上报机制
崩溃日志不能等用户手动触发——MAUI应用在
OnStart()阶段就应检查并上传残留日志: 在App.xaml.cs的
OnStart方法中扫描
AppDataDirectory下的
.crash或
.json临时日志文件 使用
HttpClient以非阻塞方式POST到你自己的日志服务(或兼容的第三方如Sentry、Azure Monitor) 上传成功后立即删除本地文件;失败则重试计数+延迟重试(如指数退避),避免反复失败占满存储 注意:iOS后台限制严格,不建议在
OnSleep中上传;Android可考虑
WorkManager补充,但MAUI标准做法是“启动即报”
替代App Center的现代方案
Visual Studio App Center诊断功能虽延续至2026年6月,但已不推荐新项目接入。更轻量可控的选择:
Sentry MAUI SDK:支持符号化解析、Release绑定、用户反馈弹窗,且有.NET MAUI官方适配包 自建HTTP Endpoint + Azure Blob Storage:日志JSON直传,用Function做解析入库,成本低、完全可控 禁用调试器上传:确保Debugger.IsAttached == false时才启用崩溃收集,避免开发环境干扰 敏感字段脱敏:自动过滤日志中的token、手机号、邮箱等,符合GDPR/《个人信息保护法》
基本上就这些。关键不在工具多炫,而在于每一步都默认考虑跨平台差异、生命周期约束和用户无感——崩溃发生了,日志得留下;用户打开了,日志得发走。
