@danieljvdm/dev-kit 1.0.1 → 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 +6 -29
- package/skill-sources.lock.json +23 -109
- 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 +11 -115
- package/skills/open-pull-request/agents/openai.yaml +3 -3
- 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,242 @@
|
|
|
1
|
+
# Logging — Sentry PHP SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK versions: `sentry/sentry` ≥ 4.12.0 · `sentry/sentry-laravel` ≥ 4.15.0 ·
|
|
4
|
+
> `sentry/sentry-symfony` ≥ 5.4.0
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
Sentry PHP structured logs are **separate from error reporting**. They produce
|
|
9
|
+
searchable log records in the Sentry Logs UI. The feature must be explicitly enabled
|
|
10
|
+
with `enable_logs: true`.
|
|
11
|
+
|
|
12
|
+
## Configuration
|
|
13
|
+
|
|
14
|
+
### PHP (base SDK)
|
|
15
|
+
|
|
16
|
+
```php
|
|
17
|
+
\Sentry\init([
|
|
18
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
19
|
+
'enable_logs' => true,
|
|
20
|
+
]);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Laravel (`.env`)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
LOG_CHANNEL=stack
|
|
27
|
+
LOG_STACK=single,sentry_logs
|
|
28
|
+
SENTRY_ENABLE_LOGS=true
|
|
29
|
+
LOG_LEVEL=info
|
|
30
|
+
SENTRY_LOG_LEVEL=warning # optional: Sentry-specific threshold
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`config/sentry.php`:
|
|
34
|
+
|
|
35
|
+
```php
|
|
36
|
+
'enable_logs' => env('SENTRY_ENABLE_LOGS', false),
|
|
37
|
+
'logs_channel_level' => env('SENTRY_LOG_LEVEL', env('LOG_LEVEL', 'debug')),
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> For SDK versions ≤ 4.16.0, also add `sentry_logs` to `config/logging.php` channels
|
|
41
|
+
> manually. Versions > 4.16.0 auto-register it.
|
|
42
|
+
|
|
43
|
+
### Symfony (`config/packages/sentry.yaml` + `monolog.yaml`)
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
# config/packages/sentry.yaml
|
|
47
|
+
sentry:
|
|
48
|
+
options:
|
|
49
|
+
enable_logs: true
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
# config/packages/monolog.yaml
|
|
54
|
+
monolog:
|
|
55
|
+
handlers:
|
|
56
|
+
sentry_logs:
|
|
57
|
+
type: service
|
|
58
|
+
id: Sentry\SentryBundle\Monolog\LogsHandler
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
# config/services.yaml
|
|
63
|
+
services:
|
|
64
|
+
Sentry\SentryBundle\Monolog\LogsHandler:
|
|
65
|
+
arguments:
|
|
66
|
+
- !php/const Monolog\Logger::INFO
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Code Examples
|
|
70
|
+
|
|
71
|
+
### PHP — direct logger API
|
|
72
|
+
|
|
73
|
+
```php
|
|
74
|
+
\Sentry\logger()->trace('Starting request processing');
|
|
75
|
+
\Sentry\logger()->debug('Cache lookup for key %s', values: ['user:42']);
|
|
76
|
+
\Sentry\logger()->info('User logged in');
|
|
77
|
+
\Sentry\logger()->warn('Rate limit approaching for %s', values: ['/api/v1/users']);
|
|
78
|
+
\Sentry\logger()->error('Payment failed for order %s', values: [$orderId]);
|
|
79
|
+
\Sentry\logger()->fatal('Database connection pool exhausted');
|
|
80
|
+
|
|
81
|
+
// Must flush at end of script (CLI) or long-running processes
|
|
82
|
+
\Sentry\logger()->flush();
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### PHP — with custom attributes
|
|
86
|
+
|
|
87
|
+
```php
|
|
88
|
+
\Sentry\logger()->warn('This is a warning log with attributes.', attributes: [
|
|
89
|
+
'attribute1' => 'string',
|
|
90
|
+
'attribute2' => 1,
|
|
91
|
+
'attribute3' => 1.0,
|
|
92
|
+
'attribute4' => true,
|
|
93
|
+
]);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### PHP — Monolog bridge
|
|
97
|
+
|
|
98
|
+
```php
|
|
99
|
+
use Monolog\Level;
|
|
100
|
+
use Monolog\Logger;
|
|
101
|
+
|
|
102
|
+
\Sentry\init([
|
|
103
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
104
|
+
'enable_logs' => true,
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
$log = new Logger('app');
|
|
108
|
+
$log->pushHandler(new \Sentry\Monolog\LogsHandler(
|
|
109
|
+
hub: \Sentry\SentrySdk::getCurrentHub(),
|
|
110
|
+
level: Level::Info,
|
|
111
|
+
));
|
|
112
|
+
|
|
113
|
+
$log->info('Application started');
|
|
114
|
+
$log->error('Something went wrong', ['user_id' => 42]);
|
|
115
|
+
|
|
116
|
+
\Sentry\logger()->flush();
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Laravel — Laravel Log facade
|
|
120
|
+
|
|
121
|
+
```php
|
|
122
|
+
use Illuminate\Support\Facades\Log;
|
|
123
|
+
|
|
124
|
+
Log::info('This is an info message');
|
|
125
|
+
Log::warning('User {id} failed to login.', ['id' => $user->id]);
|
|
126
|
+
Log::error('Payment failed', [
|
|
127
|
+
'user_id' => auth()->id(),
|
|
128
|
+
'order_id' => $orderId,
|
|
129
|
+
]);
|
|
130
|
+
|
|
131
|
+
// Send only to Sentry (not to other channels)
|
|
132
|
+
Log::channel('sentry_logs')->error('Critical failure in payment module');
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Symfony — via injected LoggerInterface
|
|
136
|
+
|
|
137
|
+
```php
|
|
138
|
+
// Inject via constructor or autowiring
|
|
139
|
+
$this->logger->info('User {id} logged in', ['id' => $userId]);
|
|
140
|
+
$this->logger->warning('Slow query detected', ['duration_ms' => 850]);
|
|
141
|
+
$this->logger->error('Payment processing failed', [
|
|
142
|
+
'user_id' => $userId,
|
|
143
|
+
'action' => 'checkout',
|
|
144
|
+
]);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Filtering with `before_send_log`
|
|
148
|
+
|
|
149
|
+
**PHP / Laravel:**
|
|
150
|
+
|
|
151
|
+
```php
|
|
152
|
+
\Sentry\init([
|
|
153
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
154
|
+
'enable_logs' => true,
|
|
155
|
+
'before_send_log' => function (\Sentry\Logs\Log $log): ?\Sentry\Logs\Log {
|
|
156
|
+
if ($log->getLevel() === \Sentry\Logs\LogLevel::info()) {
|
|
157
|
+
return null; // drop info logs
|
|
158
|
+
}
|
|
159
|
+
return $log;
|
|
160
|
+
},
|
|
161
|
+
]);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Symfony** (uses service ID, not a closure):
|
|
165
|
+
|
|
166
|
+
```yaml
|
|
167
|
+
sentry:
|
|
168
|
+
options:
|
|
169
|
+
before_send_log: "sentry.callback.before_send_log"
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```php
|
|
173
|
+
// App\Service\Sentry
|
|
174
|
+
public function getBeforeSendLog(): callable
|
|
175
|
+
{
|
|
176
|
+
return function (\Sentry\Logs\Log $log): ?\Sentry\Logs\Log {
|
|
177
|
+
if ($log->getLevel() === \Sentry\Logs\LogLevel::info()) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return $log;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Two Log Channel Types in Laravel
|
|
186
|
+
|
|
187
|
+
| Channel | Driver | Purpose |
|
|
188
|
+
| ------------- | ------------- | --------------------------------------------------------- |
|
|
189
|
+
| `sentry` | `sentry` | Sends log messages as Sentry **error events/breadcrumbs** |
|
|
190
|
+
| `sentry_logs` | `sentry_logs` | Sends **structured logs** to the Sentry Logs product |
|
|
191
|
+
|
|
192
|
+
These are independent — use `sentry_logs` for the structured logs feature.
|
|
193
|
+
|
|
194
|
+
## Log Levels
|
|
195
|
+
|
|
196
|
+
| Method | PSR Level |
|
|
197
|
+
| --------- | --------- |
|
|
198
|
+
| `trace()` | debug |
|
|
199
|
+
| `debug()` | debug |
|
|
200
|
+
| `info()` | info |
|
|
201
|
+
| `warn()` | warning |
|
|
202
|
+
| `error()` | error |
|
|
203
|
+
| `fatal()` | critical |
|
|
204
|
+
|
|
205
|
+
## Automatically Added Attributes
|
|
206
|
+
|
|
207
|
+
Every log record receives these automatically:
|
|
208
|
+
|
|
209
|
+
| Attribute | Description |
|
|
210
|
+
| ---------------------------------------- | ------------------------------------- |
|
|
211
|
+
| `sentry.environment` | Environment from SDK config |
|
|
212
|
+
| `sentry.release` | Release from SDK config |
|
|
213
|
+
| `sentry.sdk.name` / `sentry.sdk.version` | SDK metadata |
|
|
214
|
+
| `sentry.server.address` | Server hostname |
|
|
215
|
+
| `sentry.message.template` | Parameterized template string |
|
|
216
|
+
| `sentry.message.parameter.N` | Template parameter values |
|
|
217
|
+
| `user.id`, `user.name`, `user.email` | Active scope user (if set) |
|
|
218
|
+
| `sentry.origin` | Log origin (e.g., `auto.log.monolog`) |
|
|
219
|
+
|
|
220
|
+
## Flushing
|
|
221
|
+
|
|
222
|
+
Logs are buffered and must be flushed to be sent:
|
|
223
|
+
|
|
224
|
+
| Context | Behavior |
|
|
225
|
+
| ----------------- | ------------------------------------------------------------- |
|
|
226
|
+
| PHP (CLI/scripts) | Call `\Sentry\logger()->flush()` manually at end of execution |
|
|
227
|
+
| Laravel | Auto-flushed via `app->terminating()` callback |
|
|
228
|
+
| Symfony (HTTP) | Auto-flushed on `kernel.terminate` by `LogRequestListener` |
|
|
229
|
+
| Symfony (console) | Auto-flushed on `console.terminate` by `ConsoleListener` |
|
|
230
|
+
|
|
231
|
+
**Long-running CLI tasks:** Call `\Sentry\logger()->flush()` periodically to avoid
|
|
232
|
+
memory buildup.
|
|
233
|
+
|
|
234
|
+
## Troubleshooting
|
|
235
|
+
|
|
236
|
+
| Issue | Solution |
|
|
237
|
+
| --------------------------- | ----------------------------------------------------------------------------------- |
|
|
238
|
+
| Logs not appearing | Verify `enable_logs: true` and that `\Sentry\logger()->flush()` is called |
|
|
239
|
+
| Laravel logs missing | Check `LOG_STACK` includes `sentry_logs` and `LOG_LEVEL` permits expected messages |
|
|
240
|
+
| Symfony logs missing | Verify `LogsHandler` is registered in `monolog.yaml` and `enable_logs: true` is set |
|
|
241
|
+
| Tinker session missing logs | Manually call `\Sentry\logger()->flush()` — Tinker skips normal lifecycle |
|
|
242
|
+
| Info logs filtered out | Check `before_send_log` callback and `SENTRY_LOG_LEVEL` threshold |
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Metrics — Sentry PHP SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK versions: `sentry/sentry` ≥ 4.19.0 · `sentry/sentry-laravel` ≥ 4.20.0 ·
|
|
4
|
+
> `sentry/sentry-symfony` ≥ 5.8.0
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
Custom metrics (counters, distributions, gauges) are enabled by default — no extra flag
|
|
9
|
+
required. Use `\Sentry\traceMetrics()` as the entry point.
|
|
10
|
+
|
|
11
|
+
> **Note:** The old `\Sentry\metrics()` API is **fully deprecated** — all methods are
|
|
12
|
+
> no-ops. Use `\Sentry\traceMetrics()` instead.
|
|
13
|
+
|
|
14
|
+
## Metric Types
|
|
15
|
+
|
|
16
|
+
| Type | Method | Aggregations | Use for |
|
|
17
|
+
| ------------ | ---------------- | ------------------------- | --------------------------------------- |
|
|
18
|
+
| Counter | `count()` | sum | Event occurrences, request counts |
|
|
19
|
+
| Distribution | `distribution()` | p90, min, max, avg | Latencies, sizes — supports percentiles |
|
|
20
|
+
| Gauge | `gauge()` | min, max, avg, sum, count | Current values — no percentiles |
|
|
21
|
+
|
|
22
|
+
## Code Examples
|
|
23
|
+
|
|
24
|
+
### Counter — event occurrences
|
|
25
|
+
|
|
26
|
+
```php
|
|
27
|
+
\Sentry\traceMetrics()->count('button-click', 5, [
|
|
28
|
+
'browser' => 'Firefox',
|
|
29
|
+
'app_version' => '1.0.0',
|
|
30
|
+
]);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Distribution — percentile analysis
|
|
34
|
+
|
|
35
|
+
Best for latencies, response sizes, durations where p90/p99 matter:
|
|
36
|
+
|
|
37
|
+
```php
|
|
38
|
+
use \Sentry\Metrics\Unit;
|
|
39
|
+
|
|
40
|
+
\Sentry\traceMetrics()->distribution('page-load', 15.0, ['page' => '/home'], Unit::millisecond());
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Gauge — space-efficient aggregates
|
|
44
|
+
|
|
45
|
+
Use when high cardinality is a concern; no percentile support:
|
|
46
|
+
|
|
47
|
+
```php
|
|
48
|
+
use \Sentry\Metrics\Unit;
|
|
49
|
+
|
|
50
|
+
\Sentry\traceMetrics()->gauge('active-connections', 42.0, ['region' => 'eu-west'], Unit::none());
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Flushing manually
|
|
54
|
+
|
|
55
|
+
Metrics are buffered (up to 1000 entries).
|
|
56
|
+
Flush explicitly in CLI scripts or when emitting high volumes:
|
|
57
|
+
|
|
58
|
+
```php
|
|
59
|
+
\Sentry\traceMetrics()->flush();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Filtering with `before_send_metric`
|
|
63
|
+
|
|
64
|
+
**PHP / Laravel:**
|
|
65
|
+
|
|
66
|
+
```php
|
|
67
|
+
use \Sentry\Metrics\Types\Metric;
|
|
68
|
+
|
|
69
|
+
\Sentry\init([
|
|
70
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
71
|
+
'before_send_metric' => static function (Metric $metric): ?Metric {
|
|
72
|
+
if ($metric->getName() === 'removed-metric') {
|
|
73
|
+
return null; // drop this metric
|
|
74
|
+
}
|
|
75
|
+
return $metric;
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Symfony** (uses service ID, not a closure):
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
sentry:
|
|
84
|
+
options:
|
|
85
|
+
enable_metrics: true
|
|
86
|
+
before_send_metric: 'App\Sentry\BeforeSendMetricCallback'
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Units
|
|
90
|
+
|
|
91
|
+
```php
|
|
92
|
+
use \Sentry\Metrics\Unit;
|
|
93
|
+
|
|
94
|
+
// Duration
|
|
95
|
+
Unit::nanosecond() Unit::microsecond() Unit::millisecond()
|
|
96
|
+
Unit::second() Unit::minute() Unit::hour()
|
|
97
|
+
Unit::day() Unit::week()
|
|
98
|
+
|
|
99
|
+
// Information
|
|
100
|
+
Unit::bit() Unit::byte()
|
|
101
|
+
Unit::kilobyte() Unit::megabyte() Unit::gigabyte()
|
|
102
|
+
Unit::terabyte()
|
|
103
|
+
|
|
104
|
+
// Fraction
|
|
105
|
+
Unit::ratio() Unit::percent()
|
|
106
|
+
|
|
107
|
+
// Dimensionless
|
|
108
|
+
Unit::none()
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Flushing
|
|
112
|
+
|
|
113
|
+
Metrics are buffered in a ring buffer (capacity: 1000 entries):
|
|
114
|
+
|
|
115
|
+
| Context | Behavior |
|
|
116
|
+
| ----------------- | ----------------------------------------------- |
|
|
117
|
+
| PHP (CLI/scripts) | Call `\Sentry\traceMetrics()->flush()` manually |
|
|
118
|
+
| Laravel | Auto-flushed at end of each request or command |
|
|
119
|
+
| Symfony (HTTP) | Auto-flushed on `kernel.terminate` |
|
|
120
|
+
| Symfony (console) | Auto-flushed on `console.terminate` |
|
|
121
|
+
|
|
122
|
+
**Buffer limit:** When more than 1000 metrics are buffered, the oldest entries are
|
|
123
|
+
dropped. Flush periodically in high-volume scripts.
|
|
124
|
+
|
|
125
|
+
## Auto-Flush Threshold
|
|
126
|
+
|
|
127
|
+
Use `metric_flush_threshold` to automatically flush buffered metrics after N entries,
|
|
128
|
+
without needing to call `flush()` manually:
|
|
129
|
+
|
|
130
|
+
**PHP / Laravel:**
|
|
131
|
+
|
|
132
|
+
```php
|
|
133
|
+
\Sentry\init([
|
|
134
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
135
|
+
'metric_flush_threshold' => 500, // flush automatically after 500 metrics
|
|
136
|
+
]);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Symfony:**
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
sentry:
|
|
143
|
+
options:
|
|
144
|
+
metric_flush_threshold: 500
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
This is useful in CLI scripts or workers that emit metrics continuously.
|
|
148
|
+
The threshold triggers a flush mid-process so the buffer never fills to its 1000-entry
|
|
149
|
+
cap.
|
|
150
|
+
|
|
151
|
+
## Symfony Configuration
|
|
152
|
+
|
|
153
|
+
```yaml
|
|
154
|
+
sentry:
|
|
155
|
+
options:
|
|
156
|
+
enable_metrics: true # default: true
|
|
157
|
+
attach_metric_code_locations: true # attach file/line info
|
|
158
|
+
metric_flush_threshold: 500 # auto-flush after N metrics (optional)
|
|
159
|
+
before_send_metric: 'App\Sentry\BeforeSendMetricCallback'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Automatically Added Attributes
|
|
163
|
+
|
|
164
|
+
Every metric receives these automatically:
|
|
165
|
+
|
|
166
|
+
| Attribute | Description |
|
|
167
|
+
| ---------------------------------------- | ---------------------------------------------------- |
|
|
168
|
+
| `sentry.environment` | Environment from SDK config |
|
|
169
|
+
| `sentry.release` | Release from SDK config |
|
|
170
|
+
| `sentry.sdk.name` / `sentry.sdk.version` | SDK metadata |
|
|
171
|
+
| `server.address` | Server hostname |
|
|
172
|
+
| `user.id`, `user.name`, `user.email` | Active scope user (only if `send_default_pii: true`) |
|
|
173
|
+
|
|
174
|
+
## Best Practices
|
|
175
|
+
|
|
176
|
+
- Keep attribute cardinality low — avoid user IDs, UUIDs, or timestamps as attribute
|
|
177
|
+
values
|
|
178
|
+
- Use `distribution` over `gauge` when you need percentile analysis (p90, p99)
|
|
179
|
+
- Prefix metric names with your service: `"payments.charge_time"` not `"charge_time"`
|
|
180
|
+
- In high-throughput scripts, flush periodically to prevent the buffer from dropping old
|
|
181
|
+
entries
|
|
182
|
+
- Laravel closures in `config/sentry.php` may cause issues with `config:cache` — see
|
|
183
|
+
[Laravel closures config docs](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options/#closures-and-config-caching)
|
|
184
|
+
|
|
185
|
+
## Troubleshooting
|
|
186
|
+
|
|
187
|
+
| Issue | Solution |
|
|
188
|
+
| ------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
189
|
+
| Metrics not appearing | Verify SDK version meets minimum; check `enable_metrics` is `true` |
|
|
190
|
+
| Metrics being dropped | Buffer cap is 1000 — flush periodically with `\Sentry\traceMetrics()->flush()` |
|
|
191
|
+
| No percentiles in Sentry UI | Switch from `gauge` to `distribution` — gauges do not support percentiles |
|
|
192
|
+
| High cardinality warning | Reduce attribute values — avoid per-user or per-request identifiers |
|
|
193
|
+
| Old `\Sentry\metrics()` calls doing nothing | Migrate to `\Sentry\traceMetrics()` — the old API is fully deprecated |
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Profiling — Sentry PHP SDK
|
|
2
|
+
|
|
3
|
+
> Requires the **Excimer** PHP extension (Linux/macOS only — Windows not supported)
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
**Excimer extension** must be installed:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Linux (recommended)
|
|
11
|
+
apt-get install php-excimer
|
|
12
|
+
|
|
13
|
+
# PECL
|
|
14
|
+
pecl install excimer
|
|
15
|
+
|
|
16
|
+
# Enable (if needed)
|
|
17
|
+
phpenmod -s fpm excimer
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Excimer requires PHP 7.2+ and does **not** support Windows.
|
|
21
|
+
|
|
22
|
+
## Version Requirements
|
|
23
|
+
|
|
24
|
+
| Framework | Min SDK Version |
|
|
25
|
+
| ---------- | ------------------------------- |
|
|
26
|
+
| PHP (base) | `sentry/sentry` ≥ 3.15.0 |
|
|
27
|
+
| Laravel | `sentry/sentry-laravel` ≥ 3.3.0 |
|
|
28
|
+
| Symfony | `sentry/sentry-symfony` ≥ 4.7.0 |
|
|
29
|
+
|
|
30
|
+
## Configuration
|
|
31
|
+
|
|
32
|
+
Profiling requires `traces_sample_rate > 0`. `profiles_sample_rate` is relative to
|
|
33
|
+
`traces_sample_rate`.
|
|
34
|
+
|
|
35
|
+
### PHP (base SDK)
|
|
36
|
+
|
|
37
|
+
```php
|
|
38
|
+
\Sentry\init([
|
|
39
|
+
'dsn' => '___PUBLIC_DSN___',
|
|
40
|
+
'traces_sample_rate' => 1.0,
|
|
41
|
+
'profiles_sample_rate' => 1.0, // relative to traces_sample_rate
|
|
42
|
+
]);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Laravel (`config/sentry.php`)
|
|
46
|
+
|
|
47
|
+
```php
|
|
48
|
+
return [
|
|
49
|
+
'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),
|
|
50
|
+
'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'),
|
|
51
|
+
'profiles_sample_rate' => env('SENTRY_PROFILES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_PROFILES_SAMPLE_RATE'),
|
|
52
|
+
];
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`.env`:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
SENTRY_TRACES_SAMPLE_RATE=1.0
|
|
59
|
+
SENTRY_PROFILES_SAMPLE_RATE=1.0
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Symfony (`config/packages/sentry.yaml`)
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
sentry:
|
|
66
|
+
options:
|
|
67
|
+
traces_sample_rate: 1.0
|
|
68
|
+
profiles_sample_rate: 1.0
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## How `profiles_sample_rate` Works
|
|
72
|
+
|
|
73
|
+
`profiles_sample_rate` is a **fraction of already-sampled transactions**, not of all
|
|
74
|
+
requests:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Effective profiling rate = traces_sample_rate × profiles_sample_rate
|
|
78
|
+
|
|
79
|
+
Examples:
|
|
80
|
+
traces_sample_rate: 1.0, profiles_sample_rate: 1.0 → 100% of requests profiled
|
|
81
|
+
traces_sample_rate: 0.5, profiles_sample_rate: 0.5 → 25% of requests profiled
|
|
82
|
+
traces_sample_rate: 0.1, profiles_sample_rate: 1.0 → 10% of requests profiled
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Reducing Latency Impact
|
|
86
|
+
|
|
87
|
+
Profiling data is sent to Sentry after generating the response, not before:
|
|
88
|
+
|
|
89
|
+
- **Laravel (FastCGI):** Uses terminable middleware — data sent **after** response is
|
|
90
|
+
dispatched
|
|
91
|
+
- **Symfony (FastCGI):** Uses `kernel.terminate` event — same behavior
|
|
92
|
+
- **Non-FastCGI servers:** Use a local [Relay](https://docs.sentry.io/product/relay/)
|
|
93
|
+
instance:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
PHP App → local Relay (127.0.0.1) → Sentry Cloud
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Best Practices
|
|
100
|
+
|
|
101
|
+
- Start with `profiles_sample_rate: 1.0` in development to verify setup
|
|
102
|
+
- In production, reduce `traces_sample_rate` (e.g., `0.1`) — profiling follows
|
|
103
|
+
automatically
|
|
104
|
+
- Profiling has no meaningful overhead on Linux with Excimer; Relay is only needed to
|
|
105
|
+
avoid latency on non-FastCGI servers
|
|
106
|
+
- Profiles are capped at **30 seconds** per transaction
|
|
107
|
+
|
|
108
|
+
## Troubleshooting
|
|
109
|
+
|
|
110
|
+
| Issue | Solution |
|
|
111
|
+
| ------------------------------------ | ----------------------------------------------------------------------------------- |
|
|
112
|
+
| No profiles appearing | Verify Excimer is installed (`php -m \| grep excimer`) and `traces_sample_rate > 0` |
|
|
113
|
+
| `profiles_sample_rate has no effect` | Check SDK version meets minimum requirement |
|
|
114
|
+
| Windows deployment | Profiling is not supported on Windows — use Linux or macOS |
|
|
115
|
+
| High latency from profiling | Use FastCGI (terminable middleware) or deploy a local Relay instance |
|