@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# Logging — Sentry Browser SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/browser` ≥9.41.0 for `Sentry.logger` API and `enableLogs`\
|
|
4
|
+
> `consoleLoggingIntegration()`: requires ≥10.13.0+\
|
|
5
|
+
> Scope-based attributes (`getGlobalScope`, `getIsolationScope`): requires ≥10.32.0+
|
|
6
|
+
|
|
7
|
+
> ⚠️ **NPM or CDN logs bundle required** — Sentry logging is **not available** via the
|
|
8
|
+
> Loader Script. Use npm/yarn/pnpm (`@sentry/browser`) or a CDN bundle with `.logs.` in
|
|
9
|
+
> its name (e.g., `bundle.logs.metrics.min.js`).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Enabling Logs
|
|
14
|
+
|
|
15
|
+
`enableLogs` is opt-in and must be explicitly set in `Sentry.init()`:
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
import * as Sentry from "@sentry/browser";
|
|
19
|
+
|
|
20
|
+
Sentry.init({
|
|
21
|
+
dsn: "___PUBLIC_DSN___",
|
|
22
|
+
enableLogs: true, // Required — logging is disabled by default
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Without `enableLogs: true`, all `Sentry.logger.*` calls are silently no-ops and nothing
|
|
27
|
+
is sent to Sentry.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Logger API — Six Levels
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
import * as Sentry from "@sentry/browser";
|
|
35
|
+
|
|
36
|
+
Sentry.logger.trace("Entering processOrder", { fn: "processOrder", orderId: "ord_1" });
|
|
37
|
+
Sentry.logger.debug("Cache lookup", { key: "user:123", hit: false });
|
|
38
|
+
Sentry.logger.info("Order created", { orderId: "order_456", total: 99.99 });
|
|
39
|
+
Sentry.logger.warn("Rate limit approaching", { current: 95, max: 100 });
|
|
40
|
+
Sentry.logger.error("Payment failed", { reason: "card_declined", userId: "u_1" });
|
|
41
|
+
Sentry.logger.fatal("Database unavailable", { host: "db-primary" });
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| Level | Method | Typical Use |
|
|
45
|
+
| ------- | ----------------------- | ----------------------------------------------------------------------------------- |
|
|
46
|
+
| `trace` | `Sentry.logger.trace()` | Ultra-granular function entry/exit; high-volume — filter aggressively in production |
|
|
47
|
+
| `debug` | `Sentry.logger.debug()` | Development diagnostics, cache hits/misses, local state changes |
|
|
48
|
+
| `info` | `Sentry.logger.info()` | Normal business milestones, confirmations |
|
|
49
|
+
| `warn` | `Sentry.logger.warn()` | Degraded state, approaching limits, recoverable issues |
|
|
50
|
+
| `error` | `Sentry.logger.error()` | Failures requiring attention |
|
|
51
|
+
| `fatal` | `Sentry.logger.fatal()` | Critical failures, system unavailable |
|
|
52
|
+
|
|
53
|
+
**Attribute value types:** `string`, `number`, `boolean` only — `undefined`, arrays, and
|
|
54
|
+
objects are not accepted.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Parameterized Messages — `Sentry.logger.fmt`
|
|
59
|
+
|
|
60
|
+
The `fmt` tagged template literal binds each interpolated variable as a **structured,
|
|
61
|
+
searchable attribute** in Sentry:
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const userId = "user_123";
|
|
65
|
+
const productName = "Widget Pro";
|
|
66
|
+
const amount = 49.99;
|
|
67
|
+
|
|
68
|
+
Sentry.logger.info(Sentry.logger.fmt`User ${userId} purchased ${productName} for $${amount}`);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
This produces:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
message.template: "User %s purchased %s for $%s"
|
|
75
|
+
message.parameter.0: "user_123"
|
|
76
|
+
message.parameter.1: "Widget Pro"
|
|
77
|
+
message.parameter.2: 49.99
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Each parameter is independently searchable in Sentry’s log explorer.
|
|
81
|
+
You can filter by `message.parameter.0 = "user_123"` without matching the full message
|
|
82
|
+
string.
|
|
83
|
+
|
|
84
|
+
> ⚠️ `logger.fmt` must be used as a **tagged template literal** — not as a function
|
|
85
|
+
> call. `Sentry.logger.fmt("text")` will not produce structured parameters.
|
|
86
|
+
|
|
87
|
+
### When to use `fmt` vs plain attributes
|
|
88
|
+
|
|
89
|
+
| Approach | Use When |
|
|
90
|
+
| --------------------------------------------------------------- | -------------------------------------------------------- |
|
|
91
|
+
| `Sentry.logger.info(msg, { key: val })` | Variables belong as separate searchable attributes |
|
|
92
|
+
| `Sentry.logger.info` with a `Sentry.logger.fmt` tagged template | Variable is a meaningful part of the message text itself |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Console Integration (`consoleLoggingIntegration`) — SDK ≥10.13.0
|
|
97
|
+
|
|
98
|
+
Capture `console.log`, `console.warn`, `console.error`, and other console calls as
|
|
99
|
+
Sentry logs automatically:
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
import * as Sentry from "@sentry/browser";
|
|
103
|
+
|
|
104
|
+
Sentry.init({
|
|
105
|
+
dsn: "___PUBLIC_DSN___",
|
|
106
|
+
enableLogs: true,
|
|
107
|
+
integrations: [Sentry.consoleLoggingIntegration({ levels: ["log", "warn", "error"] })],
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// These are now automatically sent to Sentry
|
|
111
|
+
console.log("User logged in", { userId: 123 });
|
|
112
|
+
console.warn("Slow network detected");
|
|
113
|
+
console.error("API request failed");
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The integration intercepts `console.*` calls and converts them to structured Sentry
|
|
117
|
+
logs. Interpolated values are extracted as `message.parameter.N` attributes.
|
|
118
|
+
|
|
119
|
+
**Available levels:** `"log"`, `"info"`, `"warn"`, `"error"`, `"debug"`, `"trace"`.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Filtering Logs (`beforeSendLog`)
|
|
124
|
+
|
|
125
|
+
Filter or modify logs before they are sent to Sentry:
|
|
126
|
+
|
|
127
|
+
```javascript
|
|
128
|
+
Sentry.init({
|
|
129
|
+
dsn: "___PUBLIC_DSN___",
|
|
130
|
+
enableLogs: true,
|
|
131
|
+
beforeSendLog: (log) => {
|
|
132
|
+
// Drop debug logs in production
|
|
133
|
+
if (log.level === "debug" || log.level === "trace") {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Scrub sensitive attributes
|
|
138
|
+
if (log.attributes?.password) {
|
|
139
|
+
delete log.attributes.password;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (log.attributes?.credit_card) {
|
|
143
|
+
log.attributes.credit_card = "[REDACTED]";
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return log;
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### The `log` object shape
|
|
152
|
+
|
|
153
|
+
| Field | Type | Description |
|
|
154
|
+
| ------------ | -------- | ------------------------------------------------------------------------ |
|
|
155
|
+
| `level` | `string` | `"trace"` \| `"debug"` \| `"info"` \| `"warn"` \| `"error"` \| `"fatal"` |
|
|
156
|
+
| `message` | `string` | The log message text |
|
|
157
|
+
| `timestamp` | `number` | Unix timestamp |
|
|
158
|
+
| `attributes` | `object` | Key/value pairs attached to this log |
|
|
159
|
+
|
|
160
|
+
Return `null` to drop the log.
|
|
161
|
+
Return the (optionally modified) `log` object to send it.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Structured Attributes
|
|
166
|
+
|
|
167
|
+
Every `Sentry.logger.*` call accepts an attributes object as its second argument:
|
|
168
|
+
|
|
169
|
+
```javascript
|
|
170
|
+
Sentry.logger.info("Checkout completed", {
|
|
171
|
+
orderId: "ord_789",
|
|
172
|
+
userId: "usr_123",
|
|
173
|
+
cartValue: 149.99,
|
|
174
|
+
itemCount: 3,
|
|
175
|
+
paymentMethod: "stripe",
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Attributes become **searchable and filterable** in Sentry’s log explorer.
|
|
180
|
+
Prefer one comprehensive log with all relevant context over many small scattered logs.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Scope-Based Automatic Attributes (SDK ≥10.32.0)
|
|
185
|
+
|
|
186
|
+
Attributes set on scopes are automatically added to all logs emitted within that scope.
|
|
187
|
+
|
|
188
|
+
### Global scope — entire session
|
|
189
|
+
|
|
190
|
+
```javascript
|
|
191
|
+
// Set once at app startup — persists for the lifetime of the page
|
|
192
|
+
Sentry.getGlobalScope().setAttributes({
|
|
193
|
+
service: "checkout",
|
|
194
|
+
version: "2.1.0",
|
|
195
|
+
region: "us-east-1",
|
|
196
|
+
});
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Isolation scope — logical session context
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
// Set after user authenticates
|
|
203
|
+
Sentry.getIsolationScope().setAttributes({
|
|
204
|
+
org_id: user.orgId,
|
|
205
|
+
user_tier: user.tier,
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Current scope — single operation
|
|
210
|
+
|
|
211
|
+
```javascript
|
|
212
|
+
Sentry.withScope((scope) => {
|
|
213
|
+
scope.setAttribute("order_id", "ord_789");
|
|
214
|
+
Sentry.logger.info("Processing payment", { amount: 49.99 });
|
|
215
|
+
// order_id is included on this log only
|
|
216
|
+
});
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Constraint:** Scope attributes accept only `string`, `number`, and `boolean` values.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Auto-Generated Attributes
|
|
224
|
+
|
|
225
|
+
These are added by the SDK to every log without any developer configuration:
|
|
226
|
+
|
|
227
|
+
| Attribute | Source | Notes |
|
|
228
|
+
| ------------------------------------ | -------------------------------- | -------------------------------- |
|
|
229
|
+
| `sentry.environment` | `environment` in `Sentry.init()` | — |
|
|
230
|
+
| `sentry.release` | `release` in `Sentry.init()` | — |
|
|
231
|
+
| `sentry.sdk.name` | SDK internals | `"sentry.javascript.browser"` |
|
|
232
|
+
| `sentry.sdk.version` | SDK internals | — |
|
|
233
|
+
| `browser.name` | User-Agent parsing | e.g., `"Chrome"` |
|
|
234
|
+
| `browser.version` | User-Agent parsing | e.g., `"121.0.0"` |
|
|
235
|
+
| `user.id`, `user.name`, `user.email` | `Sentry.setUser()` | Requires `sendDefaultPii: true` |
|
|
236
|
+
| `sentry.trace.parent_span_id` | Active tracing span | Enables log ↔ trace correlation |
|
|
237
|
+
| `sentry.replay_id` | Active Session Replay session | Enables log ↔ replay correlation |
|
|
238
|
+
| `message.template` | `logger.fmt` usage | The template string |
|
|
239
|
+
| `message.parameter.N` | `logger.fmt` usage | Each interpolated value |
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Log-to-Trace Correlation
|
|
244
|
+
|
|
245
|
+
When tracing is enabled, logs are **automatically linked** to the active span:
|
|
246
|
+
|
|
247
|
+
```javascript
|
|
248
|
+
Sentry.init({
|
|
249
|
+
dsn: "___PUBLIC_DSN___",
|
|
250
|
+
enableLogs: true,
|
|
251
|
+
tracesSampleRate: 1.0,
|
|
252
|
+
integrations: [Sentry.browserTracingIntegration()],
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// Logs emitted inside a span are linked to it automatically
|
|
256
|
+
await Sentry.startSpan({ name: "checkout-flow", op: "ui.action" }, async () => {
|
|
257
|
+
Sentry.logger.info("Validating cart", { cartId: "cart_abc" });
|
|
258
|
+
await validateCart();
|
|
259
|
+
Sentry.logger.info("Initiating payment", { gateway: "stripe" });
|
|
260
|
+
await initiatePayment();
|
|
261
|
+
});
|
|
262
|
+
// Both logs above have sentry.trace.parent_span_id set to the checkout-flow span ID
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
In the Sentry UI:
|
|
266
|
+
|
|
267
|
+
- **From a log** → click the trace link to jump to the parent span and full trace
|
|
268
|
+
- **From a trace span** → click “Logs” to see all logs emitted during that span
|
|
269
|
+
- **From a replay** → logs are shown inline with the user session recording
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## When to Use Each API
|
|
274
|
+
|
|
275
|
+
| Scenario | Recommended API |
|
|
276
|
+
| --------------------------------------- | --------------------------------------------------------------- |
|
|
277
|
+
| Business event with structured data | `Sentry.logger.info(msg, { ...attrs })` |
|
|
278
|
+
| Message with embedded variables | `Sentry.logger.info` with a `Sentry.logger.fmt` tagged template |
|
|
279
|
+
| Capture an unexpected exception | `Sentry.captureException(err)` |
|
|
280
|
+
| Send an informational string event | `Sentry.captureMessage(msg, "info")` |
|
|
281
|
+
| Auto-capture existing `console.*` calls | `consoleLoggingIntegration({ levels: [...] })` |
|
|
282
|
+
|
|
283
|
+
Use `Sentry.logger.*` for **structured, searchable observability data**. Use
|
|
284
|
+
`captureException` for actual errors that need issue grouping and stack traces.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Log Level Guide
|
|
289
|
+
|
|
290
|
+
| Level | When to use | Production volume |
|
|
291
|
+
| ------- | -------------------------------------------- | -------------------------- |
|
|
292
|
+
| `trace` | Function entry/exit, loop iterations | Filter out in production |
|
|
293
|
+
| `debug` | Variable values, code paths taken | Filter out in production |
|
|
294
|
+
| `info` | User actions, business milestones, API calls | Keep — low/medium volume |
|
|
295
|
+
| `warn` | Degraded paths, retries, near-limits | Keep — low volume |
|
|
296
|
+
| `error` | Failures that need investigation | Keep — should be rare |
|
|
297
|
+
| `fatal` | System-down, unrecoverable state | Keep — should be very rare |
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Troubleshooting
|
|
302
|
+
|
|
303
|
+
| Issue | Solution |
|
|
304
|
+
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
305
|
+
| Logs not appearing in Sentry | Verify `enableLogs: true` in `Sentry.init()`; requires SDK ≥9.41.0 |
|
|
306
|
+
| “Not available via CDN/Loader Script” | Install via npm: `npm install @sentry/browser` — logging requires the npm package |
|
|
307
|
+
| `logger.fmt` not creating `message.parameter.*` | Use it as a tagged template literal — not as the function call `Sentry.logger.fmt("text", var)` |
|
|
308
|
+
| Logs not linked to traces | Ensure `browserTracingIntegration()` is added and `tracesSampleRate > 0`; logs must be emitted inside an active span |
|
|
309
|
+
| `consoleLoggingIntegration` not available | Upgrade to `@sentry/browser` ≥10.13.0 |
|
|
310
|
+
| Scope attributes not appearing on logs | Upgrade to `@sentry/browser` ≥10.32.0 for `getGlobalScope`/`getIsolationScope` APIs |
|
|
311
|
+
| Too many logs / high volume | Use `beforeSendLog` to drop `trace` and `debug` levels in production |
|
|
312
|
+
| Log attributes contain `undefined` | Only `string`, `number`, `boolean` are accepted — filter undefined values before passing |
|
|
313
|
+
| `beforeSendLog` not firing | Confirm `enableLogs: true` is set; without it, no logs are sent and no hook is called |
|
|
314
|
+
| Sensitive data appearing in logs | Add filtering in `beforeSendLog`; avoid logging sensitive data at the call site |
|
|
315
|
+
| Logs appear but have no user context | Call `Sentry.setUser({ id, email })` after authentication; set `sendDefaultPii: true` |
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# Browser Profiling — Sentry Browser SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/browser` ≥10.27.0 (Beta)
|
|
4
|
+
|
|
5
|
+
> ⚠️ **Beta status** — breaking changes may occur.
|
|
6
|
+
> Browser support is limited to **Chromium-based browsers only** (Chrome, Edge).
|
|
7
|
+
> Firefox and Safari are not supported.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## What Browser Profiling Captures
|
|
12
|
+
|
|
13
|
+
Sentry’s browser profiler uses the
|
|
14
|
+
[JS Self-Profiling API](https://wicg.github.io/js-self-profiling/) to capture:
|
|
15
|
+
|
|
16
|
+
- **JavaScript call stacks** — function names and source file locations (deobfuscated
|
|
17
|
+
via source maps)
|
|
18
|
+
- **CPU time per function** — how much time is spent in each function
|
|
19
|
+
- **Flame graphs** — aggregated across real user sessions, not just local dev
|
|
20
|
+
- **Linked profiles** — every profile is attached to a trace, enabling navigation from
|
|
21
|
+
span → flame graph in Sentry
|
|
22
|
+
|
|
23
|
+
Sampling rate: **100Hz (10ms intervals)** — runs unobtrusively in production.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Browser Compatibility
|
|
28
|
+
|
|
29
|
+
| Browser | Supported | Notes |
|
|
30
|
+
| ------------------- | --------- | ------------------------------------- |
|
|
31
|
+
| Chrome / Chromium | ✅ Yes | Primary support target |
|
|
32
|
+
| Edge (Chromium) | ✅ Yes | Same engine as Chrome |
|
|
33
|
+
| Firefox | ❌ No | JS Self-Profiling API not implemented |
|
|
34
|
+
| Safari / iOS Safari | ❌ No | JS Self-Profiling API not implemented |
|
|
35
|
+
|
|
36
|
+
> ⚠️ **Sampling bias:** Profile data is collected **only** from Chromium users.
|
|
37
|
+
> Firefox and Safari sessions are silently excluded — no error is thrown, no overhead is
|
|
38
|
+
> added.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Required HTTP Header
|
|
43
|
+
|
|
44
|
+
Every document response **must** include this header or profiling silently fails:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Document-Policy: js-profiling
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Without this header, the JS Self-Profiling API is blocked by the browser and no profiles
|
|
51
|
+
are collected.
|
|
52
|
+
|
|
53
|
+
### Platform-Specific Header Setup
|
|
54
|
+
|
|
55
|
+
**Vercel (`vercel.json`):**
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"headers": [
|
|
60
|
+
{
|
|
61
|
+
"source": "/(.*)",
|
|
62
|
+
"headers": [{ "key": "Document-Policy", "value": "js-profiling" }]
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Netlify (`netlify.toml`):**
|
|
69
|
+
|
|
70
|
+
```toml
|
|
71
|
+
[[headers]]
|
|
72
|
+
for = "/*"
|
|
73
|
+
[headers.values]
|
|
74
|
+
Document-Policy = "js-profiling"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Netlify (`_headers` file):**
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
/*
|
|
81
|
+
Document-Policy: js-profiling
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Express / Node.js:**
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
app.use((req, res, next) => {
|
|
88
|
+
res.set("Document-Policy", "js-profiling");
|
|
89
|
+
next();
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Nginx:**
|
|
94
|
+
|
|
95
|
+
```nginx
|
|
96
|
+
add_header Document-Policy "js-profiling";
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Basic Setup
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
import * as Sentry from "@sentry/browser";
|
|
105
|
+
|
|
106
|
+
Sentry.init({
|
|
107
|
+
dsn: "___PUBLIC_DSN___",
|
|
108
|
+
integrations: [Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration()],
|
|
109
|
+
tracesSampleRate: 1.0,
|
|
110
|
+
profileSessionSampleRate: 1.0, // Profile 100% of sessions (lower in production)
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> Profiling requires tracing to be active.
|
|
115
|
+
> `browserTracingIntegration()` and a `tracesSampleRate` > 0 are both required.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Configuration Options
|
|
120
|
+
|
|
121
|
+
| Option | Type | Default | Description |
|
|
122
|
+
| -------------------------- | ----------------------- | ---------- | ----------------------------------------------------------------------------------- |
|
|
123
|
+
| `profileSessionSampleRate` | `number` (0–1) | — | Fraction of sessions to profile. Evaluated **once** per page load. |
|
|
124
|
+
| `profileLifecycle` | `'manual'` \| `'trace'` | `'manual'` | Controls when profiling starts and stops (see [Profiling Modes](#profiling-modes)). |
|
|
125
|
+
|
|
126
|
+
### `profilesSampleRate` vs `profileSessionSampleRate`
|
|
127
|
+
|
|
128
|
+
| Option | SDK Version | Description |
|
|
129
|
+
| -------------------------- | ------------------- | ------------------------------------------------------------------------------ |
|
|
130
|
+
| `profilesSampleRate` | Legacy (< 10.27.0) | Transaction-based — tied to individual transaction sampling. **Deprecated.** |
|
|
131
|
+
| `profileSessionSampleRate` | Current (≥ 10.27.0) | Session-based — evaluated once per page load. **Use this for all new setups.** |
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Profiling Modes
|
|
136
|
+
|
|
137
|
+
### Trace Mode (Automatic)
|
|
138
|
+
|
|
139
|
+
Profiler starts and stops automatically in sync with every active root span (trace).
|
|
140
|
+
Recommended for general-purpose production profiling.
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
Sentry.init({
|
|
144
|
+
dsn: "___PUBLIC_DSN___",
|
|
145
|
+
integrations: [Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration()],
|
|
146
|
+
tracesSampleRate: 1.0,
|
|
147
|
+
profileSessionSampleRate: 0.1, // Profile 10% of sessions
|
|
148
|
+
profileLifecycle: "trace", // Profile automatically with each trace
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Manual Mode (Default)
|
|
153
|
+
|
|
154
|
+
Start and stop the profiler explicitly around specific code you want to measure.
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
Sentry.init({
|
|
158
|
+
dsn: "___PUBLIC_DSN___",
|
|
159
|
+
integrations: [Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration()],
|
|
160
|
+
tracesSampleRate: 1.0,
|
|
161
|
+
profileSessionSampleRate: 1.0,
|
|
162
|
+
profileLifecycle: "manual", // default
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// Somewhere in your application
|
|
166
|
+
Sentry.uiProfiler.startProfiler();
|
|
167
|
+
|
|
168
|
+
doExpensiveWork();
|
|
169
|
+
renderComplexChart();
|
|
170
|
+
|
|
171
|
+
Sentry.uiProfiler.stopProfiler();
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Use manual mode when you know exactly which operations to measure and want to avoid
|
|
175
|
+
profiling overhead during unrelated work.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Production Sampling Strategy
|
|
180
|
+
|
|
181
|
+
Profiling adds CPU overhead.
|
|
182
|
+
Use conservative rates in production:
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
Sentry.init({
|
|
186
|
+
dsn: "___PUBLIC_DSN___",
|
|
187
|
+
integrations: [Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration()],
|
|
188
|
+
tracesSampleRate: 0.2, // Sample 20% of traces
|
|
189
|
+
profileSessionSampleRate: 0.1, // Profile 10% of sessions
|
|
190
|
+
profileLifecycle: "trace",
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`profileSessionSampleRate` is evaluated **once per session** (page load), not per trace.
|
|
195
|
+
A session either profiles all its traces or none of them.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Best Practices
|
|
200
|
+
|
|
201
|
+
- **Start with `profileLifecycle: "trace"`** — automatic profiling with traces requires
|
|
202
|
+
no extra instrumentation
|
|
203
|
+
- **Set `profileSessionSampleRate` to 0.1–0.2** in production to limit overhead
|
|
204
|
+
- **Upload source maps** — profiling data shows minified names without source maps; the
|
|
205
|
+
flame graph is much more useful with them
|
|
206
|
+
- **Use manual mode** when investigating a specific known bottleneck (e.g., a slow chart
|
|
207
|
+
render or complex animation)
|
|
208
|
+
- **Combine with tracing** — profiles are always linked to a trace, so you can navigate
|
|
209
|
+
from a slow span to its flame graph
|
|
210
|
+
- **Don’t profile static hosts without header support** — GitHub Pages and some CDNs
|
|
211
|
+
cannot serve custom HTTP response headers; profiling will silently not work
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Known Limitations
|
|
216
|
+
|
|
217
|
+
| Limitation | Details |
|
|
218
|
+
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
219
|
+
| Chromium-only | Firefox and Safari do not implement the JS Self-Profiling API. Profile data represents only Chromium users. |
|
|
220
|
+
| `Document-Policy` header required | Every served document must include the header. Static hosts that can’t set custom headers cannot enable profiling. |
|
|
221
|
+
| Chrome DevTools conflict | With `browserProfilingIntegration` active, Chrome DevTools may display SDK activity as “profiling overhead” in the Performance panel. This is cosmetic. |
|
|
222
|
+
| Beta status | The API may change between minor releases. |
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Troubleshooting
|
|
227
|
+
|
|
228
|
+
| Symptom | Cause | Fix |
|
|
229
|
+
| --------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------ |
|
|
230
|
+
| No profiles in Sentry | Missing `Document-Policy: js-profiling` header | Add the header to all document responses |
|
|
231
|
+
| No profiles in Sentry | `browserTracingIntegration()` not added | Profiling requires tracing — add it and set `tracesSampleRate > 0` |
|
|
232
|
+
| No profiles in Sentry | `profileSessionSampleRate` not set | Set it (e.g., `1.0` for dev, `0.1` for production) |
|
|
233
|
+
| Profiles appear with minified names | Source maps not uploaded | Upload source maps to Sentry via the build plugin |
|
|
234
|
+
| No profiles for Firefox/Safari users | Expected — those browsers don’t support the API | No fix needed; this is by design |
|
|
235
|
+
| Chrome DevTools shows extra overhead | False positive from profiling integration | Expected; ignore in DevTools, check Sentry instead |
|
|
236
|
+
| `uiProfiler.startProfiler` is undefined | SDK version < 10.27.0 or wrong `profileLifecycle` | Upgrade SDK; `uiProfiler` is only available in manual mode |
|