Vue

在 Vue 应用中要使用 Sentry 的话,需要安装 Sentry 的浏览器版本的 JavaScript SDK:@sentry/browser。

  1. npm install --save @sentry/browser @sentry/integrations

Sentry 会自动上报应用引起的所有异常。

而且,当活跃中的组件抛出错误时,name 和 props 状态都会被捕获。这个是通过 Vue 的 config.errorHandler 钩子实现的。

添加下面的代码到 app.js 中:

  1. import Vue from "vue";
  2. import * as Sentry from "@sentry/browser";
  3. import { Vue as VueIntegration } from "@sentry/integrations";
  4. Sentry.init({
  5. dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
  6. integrations: [new VueIntegration({ Vue, attachProps: true })],
  7. });

另外,Integrations.Vue 接受一些不同的配置,有不同的作用:

  • Vue 是可选的,如果不设置,就必须要有 Window.Vue。
  • attachProps 是可选的,默认为 true。如果设置为 false,Sentry 将不会上传 Vue 组件的 props。
  • logErrors 是可选的,默认为 false。如果设置为 true,Sentry 同样会调用 Vue 的 logError 函数。

Vue 的错误处理 需要注意,如果你想用这个集成,Vue 就不会在调用内部的 logError 。这就是说 Vue 渲染过程中的错误不会显示在开发者控制台中。如果你还是想使用这个功能,确保传递 logErrors: true 选项。

如果你用的是 CDN 或者加载器,我们为每个集成提供了独立的文件,你可以这么用:

  1. <!-- Note that we now also provide a es6 build only -->
  2. <!-- <script src="https://browser.sentry-cdn.com/5.23.0/bundle.es6.min.js" integrity="sha384-ctVIHkuneDOr6QAzHv0rcNu0vWe47aCH7jrMQnO7o37Z7G5zDVq9b++/C7opuatD" crossorigin="anonymous"></script> -->
  3. <script
  4. src="https://browser.sentry-cdn.com/5.23.0/bundle.min.js"
  5. integrity="sha384-5yYHk2XjpqhbWfLwJrxsdolnhl+HfgEnD1UhVzAs6Kd2fx+ZoD0wBFjd65mWgZOG"
  6. crossorigin="anonymous"
  7. ></script>
  8. <!-- If you include the integration it will be available under Sentry.Integrations.Vue -->
  9. <script
  10. src="https://browser.sentry-cdn.com/5.23.0/vue.min.js"
  11. integirty="sha384-HvKPtlBmUYHo02VaRMvZbJL7PLFvYy7c0c3c9ZaY5M3OtiY2ywraZe8au7WtLbCH"
  12. crossorigin="anonymous"
  13. ></script>
  14. <script>
  15. Sentry.init({
  16. dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
  17. integrations: [new Sentry.Integrations.Vue({ Vue, attachProps: true })],
  18. });
  19. </script>

性能监控

  1. npm install --save @sentry/browser @sentry/integrations @sentry/tracing

下面是最基础的一个配置,它只会追踪 Vue 应用最上层的组件。

  1. import * as Sentry from "@sentry/browser";
  2. import { Vue as VueIntegration } from "@sentry/integrations";
  3. import { Integrations } from "@sentry/tracing";
  4. import Vue from "vue";
  5. Sentry.init({
  6. // ...
  7. integrations: [
  8. new Integrations.BrowserTracing(),
  9. new VueIntegration({
  10. Vue,
  11. tracing: true,
  12. }),
  13. ],
  14. tracesSampleRate: 1.0, // Be sure to lower this in production
  15. });

如果你想最终子组件,和过多的渲染细节,需要这么配置集成:

  1. new VueIntegration({
  2. Vue,
  3. tracing: true,
  4. tracingOptions: {
  5. trackComponents: true,
  6. },
  7. });