feat:集成Sentry

This commit is contained in:
leilei
2025-10-21 15:23:39 +08:00
parent 2b8e7349e6
commit f19ab86ada
4 changed files with 119 additions and 2 deletions

91
package-lock.json generated
View File

@@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.0.10", "@element-plus/icons-vue": "^2.0.10",
"@msgpack/msgpack": "^3.1.2", "@msgpack/msgpack": "^3.1.2",
"@sentry/vue": "^10.20.0",
"@vueuse/core": "^9.5.0", "@vueuse/core": "^9.5.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"axios": "^0.27.2", "axios": "^0.27.2",
@@ -947,6 +948,96 @@
"win32" "win32"
] ]
}, },
"node_modules/@sentry-internal/browser-utils": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry-internal/browser-utils/-/browser-utils-10.20.0.tgz",
"integrity": "sha512-9+NybrYs+dEM2iW5uRAYEhKkNK0XhDea5jovtDUXEvdSCMJFcdR88uztkftnCur45/hpvbgSULsGPUdHPb5ITw==",
"dependencies": {
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/feedback": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry-internal/feedback/-/feedback-10.20.0.tgz",
"integrity": "sha512-R/eGLKl7WDccLKBorEbyTsy5b99w/k4v80SntE8HL2rsO7DCDXma8TGmtHd+iZnw8dUci+EVrw7LbeGSgf3QzA==",
"dependencies": {
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry-internal/replay/-/replay-10.20.0.tgz",
"integrity": "sha512-+XPYp0CuJnf+c36/c+hHrY6wAPHCdnqllZeyU7+9LAiKsdhN8Oo4eF1v5zd097qDZBg1NrKhU44ScJIzz+vygw==",
"dependencies": {
"@sentry-internal/browser-utils": "10.20.0",
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay-canvas": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry-internal/replay-canvas/-/replay-canvas-10.20.0.tgz",
"integrity": "sha512-8DBawFi4F4e2Cu2ToiitCnYsK8idrDOv66Vq+N6c8e3qFitTTuoPQwOihb2+HY4CB06ABPW3WvfZntJJmsf91w==",
"dependencies": {
"@sentry-internal/replay": "10.20.0",
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/browser": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry/browser/-/browser-10.20.0.tgz",
"integrity": "sha512-zcf8HwFiRbzjZL9KbLev44eEOf+yl+3svQbs2BlR2KAYGaB10swV5abij0UTTGO7ClnqUZdcGpwiyyfPS6mjHg==",
"dependencies": {
"@sentry-internal/browser-utils": "10.20.0",
"@sentry-internal/feedback": "10.20.0",
"@sentry-internal/replay": "10.20.0",
"@sentry-internal/replay-canvas": "10.20.0",
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/core": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry/core/-/core-10.20.0.tgz",
"integrity": "sha512-S291KihnOIB8i7mVJIJBVHBMcCfIoY/KDJBHEfBoHY9M56g2An4FVhM9+/xR85+IoMkTySdXN08k9LEyQz4FpQ==",
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/vue": {
"version": "10.20.0",
"resolved": "https://registry.npmmirror.com/@sentry/vue/-/vue-10.20.0.tgz",
"integrity": "sha512-3mWc81mLs1CpXrihuTQNXwt0HfOIy7BAZMvtYgaTuIDvooYtBbsZ+7yGDkcwsWBtfAvE7/yP2h95M4HRIw5KyQ==",
"dependencies": {
"@sentry/browser": "10.20.0",
"@sentry/core": "10.20.0"
},
"engines": {
"node": ">=18"
},
"peerDependencies": {
"pinia": "2.x || 3.x",
"vue": "2.x || 3.x"
},
"peerDependenciesMeta": {
"pinia": {
"optional": true
}
}
},
"node_modules/@trysound/sax": { "node_modules/@trysound/sax": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",

View File

@@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.0.10", "@element-plus/icons-vue": "^2.0.10",
"@msgpack/msgpack": "^3.1.2", "@msgpack/msgpack": "^3.1.2",
"@sentry/vue": "^10.20.0",
"@vueuse/core": "^9.5.0", "@vueuse/core": "^9.5.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"axios": "^0.27.2", "axios": "^0.27.2",

View File

@@ -1,7 +1,7 @@
import { createApp } from 'vue' import { createApp } from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import * as Sentry from '@sentry/vue';
import { import {
deepClone deepClone
@@ -20,6 +20,31 @@ import router from './router'
const pinia = createPinia() const pinia = createPinia()
const app = createApp(App) const app = createApp(App)
Sentry.init({
app,
dsn: 'https://34a0d76174a64db09d31d13a8042560b@sentry.cnsdt.com/2', // 替换为你的 DSN
integrations: [
// 浏览器性能追踪集成
Sentry.browserTracingIntegration({
router,
}),
// 会话回放集成
Sentry.replayIntegration({
maskAllText: false,
blockAllMedia: false,
}),
],
// 性能监控采样率
tracesSampleRate: 1.0, // 生产环境建议设置为 0.1-0.2
// 会话回放采样率
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0,
// 环境配置
environment: import.meta.env.MODE,
// 开发环境下可禁用 Sentry
enabled: import.meta.env.PROD,
});
for (const [key, component] of Object.entries(ElementPlusIconsVue)) { for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component) app.component(key, component)
} }

View File

@@ -2,7 +2,7 @@ import { fileURLToPath, URL } from 'node:url'
import path from "path"; import path from "path";
import { defineConfig ,loadEnv} from 'vite' import { defineConfig ,loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import createVitePlugins from './vite/plugins/index.js' import createVitePlugins from './vite/plugins/index.js'
// https://vite.dev/config/ // https://vite.dev/config/
export default defineConfig(({ mode, command }) => { export default defineConfig(({ mode, command }) => {