Skip to content

lizhiyao/sentry-miniapp

Repository files navigation

Sentry Miniapp SDK

npm version npm download github forks github stars github watchers github license test coverage

基于 @sentry/core 10.5.0 的微信小程序异常监控 SDK。

注意: 1、sentry-miniapp v1.x.x 版本暂时只支持微信小程序和微信小游戏。 2、sentry-miniapp v0.x.x 版本已停止维护

特性

  • 🚀 基于最新的 Sentry JavaScript SDK 核心模块
  • 🎨 遵守 Sentry 官方统一的 API 设计文档,使用方式和官方保持一致
  • 📍 默认上报异常发生时的路由栈
  • 🎯 自动捕获小程序生命周期异常(onError、onUnhandledRejection、onPageNotFound、onMemoryWarning)
  • 🍞 自动记录面包屑(设备、用户操作、网络请求、页面导航等)
  • 🛡️ 智能错误去重和过滤机制
  • ⚡ 全面的性能监控(导航性能、渲染性能、资源加载、用户自定义性能标记)
  • 📈 智能性能阈值检查和自动警告
  • 🔧 支持在 Taro 等第三方小程序框架中使用
  • 📱 支持微信小程序和微信小游戏
  • 🔧 TypeScript 编写,提供完整的类型定义
  • 📦 支持 ES6 和 CommonJS 两种模块系统
  • 📊 完善的测试覆盖率(286 测试用例,覆盖核心功能模块)
  • 🔍 完整的集成测试套件

扫码体验:sentry-miniapp 使用示例小程序 sentry-miniapp 使用示例小程序

安装和使用

前置要求

  1. 使用前需要确保有可用的 Sentry Service,比如:使用 官方 Sentry Service 服务 或自己搭建 Sentry Service。如果想直接将异常信息上报到 https://sentry.io/,由于其没有备案,可以先将异常信息上报给自己已备案域名下的服务端接口,由服务端进行请求转发。
  2. 在小程序管理后台配置 Sentry Service 对应的 request 合法域名

安装依赖

推荐使用 npm 方式。

稳定版本:

npm install sentry-miniapp --save

Beta 版本(包含最新修复):

npm install sentry-miniapp@beta --save

注意: v1.0.1-beta.2 版本修复了事件上报中 undefined 值的问题,建议使用最新的 beta 版本。

重要提示

项目仓库中examples/wxapp/lib/sentry-miniapp.js 文件,也可以可以直接复制到小程序中使用。

快速开始

1. 初始化 SDK

在小程序的 app.jsapp.ts 中初始化 Sentry:

import * as Sentry from 'sentry-miniapp'; // 在 App() 之前初始化 Sentry.init({ dsn: 'YOUR_SENTRY_DSN_HERE', environment: 'production', // 或 'development' debug: false, // 开发环境可设置为 true // 小程序特有配置 platform: 'wechat', enableSystemInfo: true, // 是否收集系统信息 enableUserInteractionBreadcrumbs: true, // 是否记录用户交互面包屑 enableConsoleBreadcrumbs: true, // 是否记录控制台日志面包屑 enableNavigationBreadcrumbs: true, // 是否记录导航面包屑 // 采样率配置 sampleRate: 1.0, // 错误采样率 // 性能监控配置(可选) integrations: [ // 性能监控集成 Sentry.performanceIntegration({ enableNavigation: true, // 导航性能监控 enableRender: true, // 渲染性能监控 enableResource: true, // 资源加载监控 enableUserTiming: true, // 用户自定义性能标记 sampleRate: 1.0, // 性能数据采样率 reportInterval: 30000, // 数据上报间隔(毫秒) }), ] // 过滤配置 beforeSend(event) { // 可以在这里过滤或修改事件 return event; }, }); App({ // 你的小程序配置 });

2. 手动捕获异常

import * as Sentry from 'sentry-miniapp'; // 捕获异常 try { // 可能出错的代码 throw new Error('Something went wrong!'); } catch (error) { Sentry.captureException(error); } // 捕获消息 Sentry.captureMessage('用户执行了某个操作', 'info'); // 添加面包屑 Sentry.addBreadcrumb({ message: '用户点击了按钮', category: 'ui', level: 'info', data: { buttonId: 'submit-btn' } }); // 设置用户信息 Sentry.setUser({ id: '12345', username: 'john_doe', email: 'john@example.com' }); // 设置标签 Sentry.setTag('page', 'home'); // 设置上下文 Sentry.setContext('character', { name: 'Mighty Fighter', age: 19, attack_type: 'melee' });

3. 性能监控

import * as Sentry from 'sentry-miniapp'; // 手动标记性能时间点 Sentry.addPerformanceMark('page-load-start'); // ... 页面加载逻辑 Sentry.addPerformanceMark('page-load-end'); // 测量性能区间 Sentry.measurePerformance('page-load', 'page-load-start', 'page-load-end'); // 记录自定义性能数据 Sentry.recordPerformance({ name: 'api-request', value: 1200, // 毫秒 unit: 'millisecond', tags: { endpoint: '/api/user', method: 'GET' } });

贡献

欢迎通过 issuepull request 等方式贡献 sentry-miniapp

联系作者

sentry-miniapp 微信交流群

由于微信群二维码有时效性限制,想入群的同学可以加作者微信(添加时请备注 sentry-miniapp),由作者邀请入群

作者微信二维码

作者微信二维码