@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,234 @@
|
|
|
1
|
+
# Logging — Sentry Python SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `sentry-sdk` 2.35.0+ for structured Sentry Logs (`enable_logs=True`)
|
|
4
|
+
|
|
5
|
+
## Two Logging Systems
|
|
6
|
+
|
|
7
|
+
| System | Produces | Requires |
|
|
8
|
+
| -------------------------------- | ----------------------------------------------------- | ------------------------------------------ |
|
|
9
|
+
| **Sentry Structured Logs** | Searchable log records in Sentry Logs UI | `enable_logs=True` + `sentry_sdk.logger.*` |
|
|
10
|
+
| **LoggingIntegration (classic)** | Breadcrumbs and/or error events from stdlib `logging` | Auto-enabled by default |
|
|
11
|
+
|
|
12
|
+
These run simultaneously.
|
|
13
|
+
They are **not** mutually exclusive.
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
import sentry_sdk
|
|
19
|
+
from sentry_sdk.integrations.logging import LoggingIntegration
|
|
20
|
+
import logging
|
|
21
|
+
|
|
22
|
+
sentry_sdk.init(
|
|
23
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
24
|
+
enable_logs=True, # required for structured Sentry Logs
|
|
25
|
+
integrations=[
|
|
26
|
+
LoggingIntegration(
|
|
27
|
+
sentry_logs_level=logging.INFO, # stdlib records → Sentry Logs (requires enable_logs=True)
|
|
28
|
+
level=logging.INFO, # stdlib records → breadcrumbs
|
|
29
|
+
event_level=logging.ERROR, # stdlib records → Sentry error events
|
|
30
|
+
),
|
|
31
|
+
],
|
|
32
|
+
)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### `LoggingIntegration` parameters
|
|
36
|
+
|
|
37
|
+
| Parameter | Default | Effect |
|
|
38
|
+
| ------------------- | ------- | ----------------------------------------------------------------------- |
|
|
39
|
+
| `sentry_logs_level` | `INFO` | Records ≥ level → **structured Sentry Logs** (needs `enable_logs=True`) |
|
|
40
|
+
| `level` | `INFO` | Records ≥ level → **breadcrumbs** (attached to next error event) |
|
|
41
|
+
| `event_level` | `ERROR` | Records ≥ level → standalone **Sentry error events** |
|
|
42
|
+
|
|
43
|
+
## Code Examples
|
|
44
|
+
|
|
45
|
+
### Sentry Structured Logs — direct API
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
import sentry_sdk
|
|
49
|
+
from sentry_sdk import logger as sentry_logger
|
|
50
|
+
|
|
51
|
+
sentry_sdk.init(dsn="...", enable_logs=True)
|
|
52
|
+
|
|
53
|
+
sentry_logger.trace("Starting database connection {database}", database="users")
|
|
54
|
+
sentry_logger.debug("Cache miss for user {user_id}", user_id=123)
|
|
55
|
+
sentry_logger.info("Updated global cache")
|
|
56
|
+
sentry_logger.warning("Rate limit reached for endpoint {endpoint}", endpoint="/api/results/")
|
|
57
|
+
sentry_logger.error(
|
|
58
|
+
"Failed to process payment. Order: {order_id}. Amount: {amount}",
|
|
59
|
+
order_id="or_2342",
|
|
60
|
+
amount=99.99,
|
|
61
|
+
)
|
|
62
|
+
sentry_logger.fatal("Database {database} connection pool exhausted", database="users")
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Template `{attribute_name}` placeholders become **individually searchable attributes**
|
|
66
|
+
in the Sentry Logs UI.
|
|
67
|
+
|
|
68
|
+
### Extra structured attributes
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from sentry_sdk import logger as sentry_logger
|
|
72
|
+
|
|
73
|
+
sentry_logger.error(
|
|
74
|
+
"Payment processing failed",
|
|
75
|
+
attributes={
|
|
76
|
+
"payment.provider": "stripe",
|
|
77
|
+
"payment.method": "credit_card",
|
|
78
|
+
"payment.currency": "USD",
|
|
79
|
+
"user.subscription_tier": "premium",
|
|
80
|
+
},
|
|
81
|
+
)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### stdlib `logging` → Sentry Logs
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
import logging
|
|
88
|
+
import sentry_sdk
|
|
89
|
+
from sentry_sdk.integrations.logging import LoggingIntegration
|
|
90
|
+
|
|
91
|
+
sentry_sdk.init(
|
|
92
|
+
dsn="...",
|
|
93
|
+
enable_logs=True,
|
|
94
|
+
integrations=[LoggingIntegration(sentry_logs_level=logging.INFO)],
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
logger = logging.getLogger(__name__)
|
|
98
|
+
logger.info("User signed in", extra={"user_id": 42, "region": "eu-west-1"})
|
|
99
|
+
# extra fields become searchable attributes on the log entry
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Loguru integration
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
import sentry_sdk
|
|
106
|
+
from loguru import logger
|
|
107
|
+
|
|
108
|
+
# LoguruIntegration auto-activates when loguru is installed
|
|
109
|
+
sentry_sdk.init(dsn="...", enable_logs=True)
|
|
110
|
+
|
|
111
|
+
logger.info("Application started")
|
|
112
|
+
logger.error("Critical failure in payment module")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Manual configuration for full control:
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
import sentry_sdk
|
|
119
|
+
from sentry_sdk.integrations.loguru import LoguruIntegration, LoggingLevels
|
|
120
|
+
|
|
121
|
+
sentry_sdk.init(
|
|
122
|
+
dsn="...",
|
|
123
|
+
enable_logs=True,
|
|
124
|
+
integrations=[
|
|
125
|
+
LoguruIntegration(
|
|
126
|
+
sentry_logs_level=LoggingLevels.INFO.value, # → structured logs
|
|
127
|
+
level=LoggingLevels.INFO.value, # → breadcrumbs
|
|
128
|
+
event_level=LoggingLevels.ERROR.value, # → error events
|
|
129
|
+
)
|
|
130
|
+
],
|
|
131
|
+
)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### `before_send_log` hook — filter and modify
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
import sentry_sdk
|
|
138
|
+
from typing import Optional
|
|
139
|
+
|
|
140
|
+
def before_log(log, hint) -> Optional[dict]:
|
|
141
|
+
# Drop all INFO logs
|
|
142
|
+
if log["severity_text"] == "info":
|
|
143
|
+
return None
|
|
144
|
+
# Add custom attribute
|
|
145
|
+
log["attributes"]["processed_by"] = "before_log"
|
|
146
|
+
return log
|
|
147
|
+
|
|
148
|
+
sentry_sdk.init(dsn="...", enable_logs=True, before_send_log=before_log)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### `Log` object schema
|
|
152
|
+
|
|
153
|
+
| Key | Type | Description |
|
|
154
|
+
| ----------------- | ------------- | ---------------------------------------------------------------------- |
|
|
155
|
+
| `severity_text` | `str` | `"trace"` / `"debug"` / `"info"` / `"warning"` / `"error"` / `"fatal"` |
|
|
156
|
+
| `severity_number` | `int` | 1–24 (OpenTelemetry spec) |
|
|
157
|
+
| `body` | `str` | Rendered message string |
|
|
158
|
+
| `attributes` | `dict` | Custom key-value pairs |
|
|
159
|
+
| `time_unix_nano` | `int` | Unix epoch in nanoseconds |
|
|
160
|
+
| `trace_id` | `str \| None` | Associated trace ID |
|
|
161
|
+
|
|
162
|
+
### Suppress noisy loggers
|
|
163
|
+
|
|
164
|
+
Events/breadcrumbs and Sentry Logs have **separate** ignore lists.
|
|
165
|
+
`ignore_logger()` only suppresses breadcrumbs and error events — it does **not** affect
|
|
166
|
+
Sentry Logs. This means framework loggers silenced for events (e.g. `django.server`) can
|
|
167
|
+
still be captured as Sentry Logs.
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
from sentry_sdk.integrations.logging import (
|
|
171
|
+
ignore_logger,
|
|
172
|
+
ignore_logger_for_sentry_logs,
|
|
173
|
+
unignore_logger,
|
|
174
|
+
unignore_logger_for_sentry_logs,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
# Suppress breadcrumbs and error events only (Sentry Logs still captured)
|
|
178
|
+
ignore_logger("a.spammy.logger")
|
|
179
|
+
ignore_logger("boto3.*") # glob patterns supported
|
|
180
|
+
|
|
181
|
+
# Suppress Sentry Logs only (breadcrumbs and error events still captured)
|
|
182
|
+
ignore_logger_for_sentry_logs("a.noisy.logger")
|
|
183
|
+
|
|
184
|
+
# Reverse a previous ignore
|
|
185
|
+
unignore_logger("a.spammy.logger")
|
|
186
|
+
unignore_logger_for_sentry_logs("a.noisy.logger")
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
| Helper | Affects |
|
|
190
|
+
| --------------------------------------- | ------------------------------------------ |
|
|
191
|
+
| `ignore_logger(name)` | Breadcrumbs + error events only |
|
|
192
|
+
| `ignore_logger_for_sentry_logs(name)` | Sentry Logs only |
|
|
193
|
+
| `unignore_logger(name)` | Reverses `ignore_logger()` |
|
|
194
|
+
| `unignore_logger_for_sentry_logs(name)` | Reverses `ignore_logger_for_sentry_logs()` |
|
|
195
|
+
|
|
196
|
+
## Decision Table
|
|
197
|
+
|
|
198
|
+
| Goal | Tool |
|
|
199
|
+
| ----------------------------------------------- | ----------------------------------------------------------------- |
|
|
200
|
+
| Searchable structured records in Sentry Logs UI | `sentry_sdk.logger.*` + `enable_logs=True` |
|
|
201
|
+
| Bridge existing stdlib `logging` to Sentry Logs | `LoggingIntegration(sentry_logs_level=...)` + `enable_logs=True` |
|
|
202
|
+
| Bridge loguru to Sentry Logs | `LoguruIntegration(sentry_logs_level=...)` + `enable_logs=True` |
|
|
203
|
+
| Breadcrumbs for error context | `LoggingIntegration(level=logging.INFO)` (default) |
|
|
204
|
+
| Auto-create error events from log calls | `LoggingIntegration(event_level=logging.ERROR)` (default) |
|
|
205
|
+
| Drop/modify a log before sending | `before_send_log` callback |
|
|
206
|
+
| Suppress a logger from breadcrumbs/events only | `ignore_logger(name)` |
|
|
207
|
+
| Suppress a logger from Sentry Logs only | `ignore_logger_for_sentry_logs(name)` |
|
|
208
|
+
| Re-enable a previously ignored logger | `unignore_logger(name)` / `unignore_logger_for_sentry_logs(name)` |
|
|
209
|
+
|
|
210
|
+
## Automatically Added Attributes
|
|
211
|
+
|
|
212
|
+
Every log record receives these automatically:
|
|
213
|
+
|
|
214
|
+
| Attribute | Source |
|
|
215
|
+
| ---------------------------------------- | --------------------------- |
|
|
216
|
+
| `sentry.environment` | `init(environment=...)` |
|
|
217
|
+
| `sentry.release` | `init(release=...)` |
|
|
218
|
+
| `sentry.sdk.name` / `sentry.sdk.version` | SDK metadata |
|
|
219
|
+
| `server.address` | hostname |
|
|
220
|
+
| `sentry.message.template` | Original template string |
|
|
221
|
+
| `sentry.message.parameter.*` | Template placeholder values |
|
|
222
|
+
| `user.id`, `user.name`, `user.email` | Active scope user (if set) |
|
|
223
|
+
|
|
224
|
+
## Troubleshooting
|
|
225
|
+
|
|
226
|
+
| Issue | Solution |
|
|
227
|
+
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
228
|
+
| `sentry_sdk.logger.*` calls have no effect | Ensure `enable_logs=True` is set in `sentry_sdk.init()` |
|
|
229
|
+
| stdlib logs not appearing as Sentry Logs | Set `sentry_logs_level` in `LoggingIntegration` and `enable_logs=True` |
|
|
230
|
+
| Logger’s own level filters out records | SDK respects the logger’s configured level — set it to `logging.INFO` or lower |
|
|
231
|
+
| Too many log records hitting quota | Use `before_send_log` to filter by severity or attribute |
|
|
232
|
+
| Loguru not auto-activating | Verify `loguru` is installed; or add `LoguruIntegration()` explicitly |
|
|
233
|
+
| `ignore_logger()` still sending Sentry Logs | Expected — `ignore_logger()` only suppresses breadcrumbs/events; use `ignore_logger_for_sentry_logs()` to suppress Sentry Logs |
|
|
234
|
+
| Framework logger (e.g. `django.server`) not appearing in Sentry Logs | It may be in the default Sentry Logs ignore list; call `unignore_logger_for_sentry_logs("django.server")` |
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Metrics — Sentry Python SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `sentry-sdk` 2.44.0+
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`sentry_sdk.metrics` provides custom counters, gauges, and distributions.
|
|
8
|
+
Metrics are enabled by default — no extra `init()` flag needed.
|
|
9
|
+
|
|
10
|
+
## Metric Types
|
|
11
|
+
|
|
12
|
+
| Type | API | Use for |
|
|
13
|
+
| ------------ | ------------------------ | ----------------------------------------------------------- |
|
|
14
|
+
| Counter | `metrics.count()` | Event occurrences, request counts |
|
|
15
|
+
| Distribution | `metrics.distribution()` | Latencies, sizes — supports p50/p90/p95/p99 |
|
|
16
|
+
| Gauge | `metrics.gauge()` | Current values (min, max, avg, sum, count — no percentiles) |
|
|
17
|
+
|
|
18
|
+
## Configuration
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
import sentry_sdk
|
|
22
|
+
|
|
23
|
+
sentry_sdk.init(
|
|
24
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
25
|
+
# No extra flag — metrics are on by default
|
|
26
|
+
)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Optional `before_send_metric` hook:
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
from typing import Optional
|
|
33
|
+
|
|
34
|
+
def before_metric(metric, hint) -> Optional[dict]:
|
|
35
|
+
if metric["name"] == "noisy-metric":
|
|
36
|
+
return None # drop this metric
|
|
37
|
+
metric["attributes"]["env"] = "prod" # add attribute
|
|
38
|
+
return metric
|
|
39
|
+
|
|
40
|
+
sentry_sdk.init(dsn="...", before_send_metric=before_metric)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Code Examples
|
|
44
|
+
|
|
45
|
+
### Counter — event occurrences
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
import sentry_sdk
|
|
49
|
+
|
|
50
|
+
sentry_sdk.metrics.count(
|
|
51
|
+
"button_click",
|
|
52
|
+
1,
|
|
53
|
+
attributes={
|
|
54
|
+
"browser": "Firefox",
|
|
55
|
+
"page": "/checkout",
|
|
56
|
+
},
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Increment by more than 1
|
|
60
|
+
sentry_sdk.metrics.count("api.request", 5, attributes={"endpoint": "/v2/users"})
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Distribution — percentile analysis
|
|
64
|
+
|
|
65
|
+
Best for latencies, response sizes, durations where p50/p90/p99 matter:
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import time
|
|
69
|
+
import sentry_sdk
|
|
70
|
+
|
|
71
|
+
start = time.time()
|
|
72
|
+
process_order(order)
|
|
73
|
+
duration_ms = (time.time() - start) * 1000
|
|
74
|
+
|
|
75
|
+
sentry_sdk.metrics.distribution(
|
|
76
|
+
"order.processing_time",
|
|
77
|
+
duration_ms,
|
|
78
|
+
unit="millisecond",
|
|
79
|
+
attributes={"order.type": "subscription", "region": "eu"},
|
|
80
|
+
)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Gauge — space-efficient aggregates
|
|
84
|
+
|
|
85
|
+
Use when high cardinality is a concern; no percentile support:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import sentry_sdk
|
|
89
|
+
|
|
90
|
+
sentry_sdk.metrics.gauge(
|
|
91
|
+
"queue.depth",
|
|
92
|
+
len(pending_jobs),
|
|
93
|
+
unit="none",
|
|
94
|
+
attributes={"queue": "billing"},
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### All four attribute value types
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
sentry_sdk.metrics.count(
|
|
102
|
+
"api.request",
|
|
103
|
+
1,
|
|
104
|
+
attributes={
|
|
105
|
+
"endpoint": "/v2/users", # str
|
|
106
|
+
"method": "POST",
|
|
107
|
+
"success": True, # bool
|
|
108
|
+
"status_code": 201, # int
|
|
109
|
+
"latency": 0.042, # float
|
|
110
|
+
},
|
|
111
|
+
)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Unit strings
|
|
115
|
+
|
|
116
|
+
| Category | Values |
|
|
117
|
+
| ------------- | ----------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| Time | `"nanosecond"`, `"microsecond"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"day"`, `"week"` |
|
|
119
|
+
| Data | `"bit"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"` |
|
|
120
|
+
| Fractions | `"ratio"`, `"percent"` |
|
|
121
|
+
| Dimensionless | `"none"` (default when omitted) |
|
|
122
|
+
|
|
123
|
+
### `before_send_metric` — `Metric` schema
|
|
124
|
+
|
|
125
|
+
| Key | Type | Description |
|
|
126
|
+
| ------------ | ------------- | ------------------------------------------ |
|
|
127
|
+
| `name` | `str` | Metric identifier |
|
|
128
|
+
| `type` | `str` | `"counter"` / `"gauge"` / `"distribution"` |
|
|
129
|
+
| `value` | `float` | Numeric measurement |
|
|
130
|
+
| `unit` | `str \| None` | Unit string |
|
|
131
|
+
| `attributes` | `dict` | Custom key-value pairs |
|
|
132
|
+
| `timestamp` | `float` | Epoch seconds |
|
|
133
|
+
| `trace_id` | `str \| None` | Associated trace ID |
|
|
134
|
+
| `span_id` | `str \| None` | Active span ID |
|
|
135
|
+
|
|
136
|
+
## Best Practices
|
|
137
|
+
|
|
138
|
+
- Keep attribute cardinality low — avoid user IDs, UUIDs, or timestamps as attribute
|
|
139
|
+
values
|
|
140
|
+
- Use `distribution` over `gauge` when you need percentile analysis
|
|
141
|
+
- Prefix metric names with your service name: `"payments.charge_time"` not
|
|
142
|
+
`"charge_time"`
|
|
143
|
+
- Use standard unit strings — Sentry renders them in the UI with proper labels
|
|
144
|
+
- Metrics are buffered and flushed periodically — avoid using them for critical alerting
|
|
145
|
+
requiring sub-second latency
|
|
146
|
+
|
|
147
|
+
## Troubleshooting
|
|
148
|
+
|
|
149
|
+
| Issue | Solution |
|
|
150
|
+
| --------------------------- | ---------------------------------------------------------------------------------- |
|
|
151
|
+
| Metrics not appearing | Verify SDK version ≥ 2.44.0; check `debug=True` output |
|
|
152
|
+
| Metric dropped silently | Check `before_send_metric` hook; verify metric name contains no special characters |
|
|
153
|
+
| High cardinality warning | Reduce attribute values — avoid per-user or per-request identifiers |
|
|
154
|
+
| No percentiles in Sentry UI | Switch from `gauge` to `distribution` — gauges do not support percentiles |
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Profiling — Sentry Python SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `sentry-sdk` 1.18.0+ (transaction-based); 2.24.1+ (continuous /
|
|
4
|
+
> session-based)
|
|
5
|
+
|
|
6
|
+
## Configuration
|
|
7
|
+
|
|
8
|
+
| Option | API | Min SDK | Purpose |
|
|
9
|
+
| ----------------------------- | -------------------------- | ------- | --------------------------------------------------------------------- |
|
|
10
|
+
| `profiles_sample_rate` | Transaction-based (legacy) | 1.18.0 | Fraction of transactions to profile; relative to `traces_sample_rate` |
|
|
11
|
+
| `profile_session_sample_rate` | Continuous (new) | 2.24.1 | Fraction of sessions to profile; evaluated once per process start |
|
|
12
|
+
| `profile_lifecycle` | Continuous (new) | 2.24.1 | `"trace"` = SDK auto-manages; `"manual"` = explicit start/stop |
|
|
13
|
+
|
|
14
|
+
Profiling requires `traces_sample_rate > 0` (or `traces_sampler`) to be set.
|
|
15
|
+
|
|
16
|
+
## API Comparison
|
|
17
|
+
|
|
18
|
+
| | `profiles_sample_rate` (transaction-based) | `profile_session_sample_rate` (continuous) |
|
|
19
|
+
| ---------------- | ------------------------------------------ | ------------------------------------------ |
|
|
20
|
+
| **Min SDK** | 1.18.0 | 2.24.1 |
|
|
21
|
+
| **Evaluated** | Per transaction | Once per process/deployment start |
|
|
22
|
+
| **Max duration** | 30 seconds per transaction | Unlimited |
|
|
23
|
+
| **Requires** | `traces_sample_rate` | `profile_lifecycle` + `traces_sample_rate` |
|
|
24
|
+
| **Use when** | Simple setup, short-lived transactions | Long-running apps, background services |
|
|
25
|
+
|
|
26
|
+
## Code Examples
|
|
27
|
+
|
|
28
|
+
### Transaction-based profiling (simple / legacy)
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import sentry_sdk
|
|
32
|
+
|
|
33
|
+
sentry_sdk.init(
|
|
34
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
35
|
+
traces_sample_rate=1.0,
|
|
36
|
+
profiles_sample_rate=1.0, # relative to traces_sample_rate
|
|
37
|
+
# e.g. profiles_sample_rate=0.5 → profiles 50% of sampled transactions
|
|
38
|
+
)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Profiles start when the transaction starts and stop when it ends or after **30
|
|
42
|
+
seconds**, whichever is first.
|
|
43
|
+
|
|
44
|
+
### Continuous profiling — auto-managed (`profile_lifecycle="trace"`)
|
|
45
|
+
|
|
46
|
+
SDK automatically starts and stops the profiler around active spans.
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
import sentry_sdk
|
|
50
|
+
|
|
51
|
+
sentry_sdk.init(
|
|
52
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
53
|
+
traces_sample_rate=1.0,
|
|
54
|
+
profile_session_sample_rate=1.0, # evaluated once at process start
|
|
55
|
+
profile_lifecycle="trace", # SDK manages start/stop automatically
|
|
56
|
+
)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Continuous profiling — manual control (`profile_lifecycle="manual"`)
|
|
60
|
+
|
|
61
|
+
Full programmatic control over profiler lifetime.
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
import sentry_sdk
|
|
65
|
+
|
|
66
|
+
sentry_sdk.init(
|
|
67
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
68
|
+
traces_sample_rate=1.0,
|
|
69
|
+
profile_session_sample_rate=1.0,
|
|
70
|
+
profile_lifecycle="manual",
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# Application startup
|
|
74
|
+
sentry_sdk.profiler.start_profiler()
|
|
75
|
+
|
|
76
|
+
# ... application runs ...
|
|
77
|
+
|
|
78
|
+
# Application shutdown
|
|
79
|
+
sentry_sdk.profiler.stop_profiler()
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Production-recommended setup (continuous)
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
import sentry_sdk
|
|
86
|
+
import signal
|
|
87
|
+
|
|
88
|
+
sentry_sdk.init(
|
|
89
|
+
dsn="https://<key>@<org>.ingest.sentry.io/<project>",
|
|
90
|
+
environment="production",
|
|
91
|
+
release="my-app@2.0.0",
|
|
92
|
+
traces_sample_rate=0.1, # sample 10% of transactions
|
|
93
|
+
profile_session_sample_rate=1.0, # profile all sampled sessions
|
|
94
|
+
profile_lifecycle="trace",
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Best Practices
|
|
99
|
+
|
|
100
|
+
- Use continuous profiling (`profile_session_sample_rate` + `profile_lifecycle`) for
|
|
101
|
+
long-running services and production workloads
|
|
102
|
+
- Use transaction-based (`profiles_sample_rate`) for simple setups or short-lived
|
|
103
|
+
scripts
|
|
104
|
+
- `profile_session_sample_rate` is evaluated **once at process start** — changing it
|
|
105
|
+
requires a restart
|
|
106
|
+
- `"trace"` and `"manual"` profile lifecycles are mutually exclusive; do not mix them
|
|
107
|
+
- Reduce `traces_sample_rate` in production (e.g., `0.1`) — profiling overhead is low
|
|
108
|
+
but not zero
|
|
109
|
+
- Python’s GIL means the profiler captures the thread holding the GIL; async I/O wait
|
|
110
|
+
time appears as near-zero CPU — this is expected
|
|
111
|
+
|
|
112
|
+
## Troubleshooting
|
|
113
|
+
|
|
114
|
+
| Issue | Solution |
|
|
115
|
+
| ------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
116
|
+
| No profiles appearing | Verify `traces_sample_rate > 0` and profiling options are set correctly |
|
|
117
|
+
| Profiles cut off at 30s | Switch to continuous profiling (`profile_session_sample_rate`) |
|
|
118
|
+
| `profile_session_sample_rate` has no effect | Check SDK version is ≥ 2.24.1; ensure `profile_lifecycle` is also set |
|
|
119
|
+
| Profiler not stopping | In `"manual"` mode, call `sentry_sdk.profiler.stop_profiler()` on shutdown |
|
|
120
|
+
| Async functions show no CPU time | Expected — Python profiler only captures GIL-holding time, not async I/O wait |
|